【问题标题】:Django, how to set duration field to be the diffrence between two datetime fieldsDjango,如何将持续时间字段设置为两个日期时间字段之间的差异
【发布时间】:2020-11-12 06:32:37
【问题描述】:

我有一个 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)

【问题讨论】:

    标签: python django django-models duration python-datetime


    【解决方案1】:

    你可以添加一个辅助函数

    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) 
    

    【讨论】:

      【解决方案2】:

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

      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
      

      【讨论】:

        猜你喜欢
        • 2017-09-14
        • 1970-01-01
        • 1970-01-01
        • 2012-01-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多