首页 > 解决方案 > 根据另一个模型中的字段填充一个模型的两个字段

问题描述

我有以下型号

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 分钟(计算)。注意在程序创建时用户只输入块时间,所以一开始剩余时间和运行时间将为零,因为还没有创建段。

Segment section(s) 不仅有段的长度,还有两个计算字段——从第一个段开始到当前段的运行时间,以及剩余时间(基于块时间)。所以在上面的例子中。段号 段时间 运行时间 剩余时间


   1                  28:00        28:00         32:00
   2                  28:00        56:00         04:00

我被困在如何对这些视图/表单进行编码,以便在有人进入新段时进行计算。它也可以超过持续时间,如果是这样 - 将剩余时间显示为负值,包括在段和程序剩余时间值中。我在模型中包含了 Duration 字段和 Time 字段,认为如果我以两种方式存储它们会更容易显示它们......

任何定向帮助将不胜感激。

标签: pythondjango

解决方案


推荐阅读