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)