Django,如何将持续时间字段设置为两个日期时间字段之间的差异
Django, how to set duration field to be the diffrence between two datetime fields
我有一个 Django 模型,我想根据来自两个 DateTime 字段的输入数据计算持续时间字段,并以小时:分钟为单位存储它们之间的差异(我什至不确定持续时间字段是这里是正确的选择。
这是我目前得到的。
class CarEventsData(models.Model):
car = models.ForeignKey(Car, on_delete=models.CASCADE, related_name="events_of_cow")
out = models.DateTimeField(null=True, help_text="When the cow went OUT TO Pasture.")
_in = models.DateTimeField(null=True, help_text="When the cow got back IN FROM Pasture.")
duration = models.DurationField()
def save(self, *args, **kwargs):
"""
Should set duration field to total time between out and in data.
"""
self.duration = self.out - self._in
super(CarEventsData, self).save(*args, **kwargs)
您的代码看起来是正确的。如果您想为某些特定目的节省持续时间,那没关系,您可以这样做。有一种更好的方法,您不必保存持续时间并在运行时派生数据。
class CarEventsData(models.Model):
car = models.ForeignKey(Car, on_delete=models.CASCADE, related_name="events_of_cow")
out = models.DateTimeField(null=True, help_text="When the cow went OUT TO Pasture.")
_in = models.DateTimeField(null=True, help_text="When the cow got back IN FROM Pasture.")
def duration(self):
return self.out - self._in
您可以添加辅助函数
helper.py
def get_overtime_application_hours(start_time, end_time) -> int:
difference = end_time - start_time
hours = difference.seconds/3600
return hours
导入您的模型
from .healper import get_overtime_application_hours
然后
def duration(self):
hours = get_overtime_application_hours(self.out,
self._in)
return round(hours)
我有一个 Django 模型,我想根据来自两个 DateTime 字段的输入数据计算持续时间字段,并以小时:分钟为单位存储它们之间的差异(我什至不确定持续时间字段是这里是正确的选择。
这是我目前得到的。
class CarEventsData(models.Model):
car = models.ForeignKey(Car, on_delete=models.CASCADE, related_name="events_of_cow")
out = models.DateTimeField(null=True, help_text="When the cow went OUT TO Pasture.")
_in = models.DateTimeField(null=True, help_text="When the cow got back IN FROM Pasture.")
duration = models.DurationField()
def save(self, *args, **kwargs):
"""
Should set duration field to total time between out and in data.
"""
self.duration = self.out - self._in
super(CarEventsData, self).save(*args, **kwargs)
您的代码看起来是正确的。如果您想为某些特定目的节省持续时间,那没关系,您可以这样做。有一种更好的方法,您不必保存持续时间并在运行时派生数据。
class CarEventsData(models.Model):
car = models.ForeignKey(Car, on_delete=models.CASCADE, related_name="events_of_cow")
out = models.DateTimeField(null=True, help_text="When the cow went OUT TO Pasture.")
_in = models.DateTimeField(null=True, help_text="When the cow got back IN FROM Pasture.")
def duration(self):
return self.out - self._in
您可以添加辅助函数
helper.py
def get_overtime_application_hours(start_time, end_time) -> int:
difference = end_time - start_time
hours = difference.seconds/3600
return hours
导入您的模型
from .healper import get_overtime_application_hours
然后
def duration(self):
hours = get_overtime_application_hours(self.out,
self._in)
return round(hours)