首页 > 解决方案 > Django DateTime 减法小时数

问题描述

我减去两个 datetime 对象并得到整数而不是小时和分钟的时间。

这是我的模型.PY

class TimeLog(models.Model)
    start_date  = models.DateTimeField(null=True, blank=True, default=datetime.now)
    end_date    = models.DateTimeField(null=True, blank=True, default=datetime.now)
    time_diff = models.DateTimeField(null=True, blank=True)

TimeLog.objects.filter(time_diff=None).update(time_diff=F('end_date') - F('start_date'))

我得到了2020-09-12 22:51:58.383288 - 2020-09-12 23:03:57.088453 = 718705165 我如何718705165在几小时和几分钟内完成?

标签: pythondjangodatetimedjango-models

解决方案


您应该制作time_diff一个DurationField[Django-doc]来指定一个持续时间,而不是日期时间对象:

class TimeLog(models.Model):
    start_date  = models.DateTimeField(null=True, auto_now_add=True)
    end_date    = models.DateTimeField(null=True, auto_now_add=True)
    time_diff = models.DurationField(null=True, blank=True)

您可以使用ExpressionWrapper[Django-doc]将其转换为timedelta对象:

from django.db.models import DurationField, ExpressionWrapper, F

TimeLog.objects.filter(time_diff=None).update(
    time_diff=ExpressionWrapper(
        F('end_date') - F('start_date'),
        output_field=DurationField()
    )
)

推荐阅读