DJANGO避免在DateTime计算上重复日期

时间:2016-12-20 22:25:52

标签: python django datetime

我设法创建了一个非常简单的模型,它允许我减去2个DateTime字段,如下所示:

class Log(models.Model):
    date = models.DateField()
    take = models.DateTimeField()
    land = models.DateTimeField()
    tot = models.CharField(max_length=200, blank=True, default='00000')

    def __str__(self):
        return str(self.date)

    def time_delta(self):
        tdelta = self.land - self.take
        return str(tdelta)

    def save(self, *args, **kwargs):
        self.tot = self.time_delta()
        super(Log, self).save(*args, **kwargs)

我的问题是用户必须在每个字段上指定日期。如何让字段takeland一劳永逸地引用date

2 个答案:

答案 0 :(得分:0)

我不知道如何在你的Django模型中做到这一点。我认为您必须在控制器中计算日期和时间,然后在数据库中注册值。

您可以使用datetime.datetime.combine()函数执行类似操作:

  

返回一个新的datetime对象,其日期组件等于给定的日期对象,并且其时间组件等于给定的时间对象。

您有一个参考日期,例如:今天。

import datetime

date = datetime.date.today()

用户输入起飞时间,您可以将此时间与参考日期结合起来。

takeoff_time = datetime.time(8, 12)
takeoff_datetime = datetime.datetime.combine(date, takeoff_time)
print(takeoff_datetime.isoformat(" "))
# -> 2016-12-21 08:12:00

如果着陆日期与起飞日期相同,您可以使用相同的日期参考计算着陆日期/时间:

landing_time = datetime.time(12, 37)
landing_datetime = datetime.datetime.combine(date, landing_time)
print(landing_datetime.isoformat(" "))
# -> 2016-12-21 12:37:00

然后,您可以在数据库中注册 date ,_takeoff_datetime_和_landing_datetime_。

注意:您可以对航班时间

执行相同的操作

答案 1 :(得分:0)

我最终设法找到了一个主要基于Laurent答案的解决方案,所以在这里,如果这可以帮助其他人:

from datetime import datetime


def calculation(self):
    calc_take_off = datetime.combine(self.date, self.take)
    calc_land = datetime.combine(self.date, self.land)
    result = calc_land - calc_take_off
    return str(result)

然后将其保存在模型中:

def save(self, *args, **kwargs):
    self.tot = self.calculation()
    super(Log, self).save(*args, **kwargs)