python - 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
在几小时和几分钟内完成?
解决方案
您应该制作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()
)
)