我有以下型号
from django.db import models
class Program(models.Model):
title = models.CharField(max_length=190)
block_time = models.TimeField(default="00:00:00")
block_time_delta = models.DurationField(default="00:00:00")
running_time = models.TimeField(default="00:00:00")
running_time_delta = models.DurationField(default="00:00:00")
remaining_time = models.TimeField(default="00:00:00")
remaining_time_delta = models.DurationField(default="00:00:00")
def __str__(self):
return f"{self.pk} : {self.title}"
class Segment(models.Model):
program_id = models.ForeignKey(Program,
on_delete=models.CASCADE,
related_name='segments', #new link to Program
)
sequence_number = models.DecimalField(decimal_places=2,max_digits=6,default="0.00")
title = models.CharField(max_length=190)
length_time = models.TimeField(null=True,default=None, blank=True)
length_time_delta = models.DurationField(default="00:00:00")
def __str__(self):
return f"{self.title}"
创建程序的表格允许您输入一个块时间,但其他时间是根据段计算的。 表单将具有程序创建/更新功能,而段表单将具有程序信息以及在其上添加一个或多个段的能力。
因此,如果我有一个长达一小时的程序(block_time = 1 小时),以及两个 28 分钟的段,那么在程序屏幕上,持续时间将为 1 小时,运行时间为 56:00 分钟(计算),剩余时间 4 分钟(计算)。注意在程序创建时用户只输入Block Time,所以一开始剩余时间和运行时间都为零,因为还没有创建段。
Segment 部分不仅有段的长度,还有两个计算字段 - 从第一个段到当前段的运行时间,以及剩余时间(基于块时间)。所以在上面的例子中。 Segment number Segment Time Run Tine 剩余时间
1 28:00 28:00 32:00
2 28:00 56:00 04:00
我被困在如何对这些视图/表单进行编码,以便在有人输入新细分时计算它。它还可以超过持续时间,如果是这样 - 将剩余时间显示为负值,包括在段和程序剩余时间值中。 我在模型中同时包含了 Duration 字段和 Time 字段,认为如果我以两种方式存储它们会更容易显示它们....
任何方向性帮助将不胜感激。