django DateField 模型 -- 无法找到日期差异



我无法在表单中找到两个日期之间的差异。

models.py:
  class Testing(models.Model):
        Planned_Start_Date = models.DateField()
        Planned_End_Date = models.DateField()
        Planned_Duration = models.IntegerField(default=Planned_Start_Date - Planned_End_Date)

必须计算日期之间的差异,它应该存储在数据库中,但它不起作用

default是一个

可调用的函数,只在类级别使用,所以你不能用它来做你想做的事情。您应该重写模型的 save() 方法(或者更好的是,实现一个 pre_save 信号处理程序来填充字段,就在保存对象之前:

def save(self, **kwargs):
    self.Planned_Duration = self.Planned_End_Date - self.Planned_Start_Date
    super().save(**kwargs)

但是,为什么要将计算属性保存到数据库中呢?此列是不必要的。无论是查询(您可以轻松地在开始日期和结束日期使用计算查询)还是检索,您都在浪费数据库空间。

# if you need the duration just define a property
@property
def planned_duration(self):
    return self.Planned_End_Date - self.Planned_Start_Date
# if you need to query tasks which last more than 2 days
Testing.objects.filter(Planned_End_Date__gt=F('Planned_Start_Date') + datetime.timedelta(days=2))

注意:Python 约定建议您使用 snake_case ( planned_durationplanned_end_dateplanned_start_date ) 来命名字段。将驼峰大小写用于类 ( TestingTask )。不要将两者混为一谈。