我设法创建了一个非常简单的模型,它允许我减去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)
我的问题是用户必须在每个字段上指定日期。如何让字段take
和land
一劳永逸地引用date
?
答案 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)