根据另一个模型中的字段填充一个模型的两个字段

时间:2021-03-10 21:57:31

标签: python django

我有以下型号

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 字段,认为如果我以两种方式存储它们会更容易显示它们....

任何方向性帮助将不胜感激。

0 个答案:

没有答案