Django,如何将duration字段设置为两个datetime字段之间的差异

2024-04-28 23:14:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Django模型,我想根据两个DateTime字段的输入数据计算一个duration字段,并将它们之间的差异存储在小时:分钟(我甚至不确定duration字段是否是正确的选择)

这就是我目前得到的

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)

Tags: thetextinselftruemodelshelpout
2条回答

您可以添加一个助手函数

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) 

您的代码看起来是正确的。如果你想为某些特定的目的节省时间,那没关系,你可以这样做。有一种更好的方法,您不必在运行时保存持续时间并派生数据

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

相关问题 更多 >