Django models计算时间差/平均时间/Datetimefield平均值
环境
Django 2.2.28
MySQL 8.0
需求
在一个model当中有开始执行时间(start_time)和结束时间(end_time),需要计算平均耗时(end_time - start_time)
from django.db import models
class xxx(models.Model):
...
start_time = models.DateTimeField(null=True, blank=True)
end_time = models.DateTimeField(null=True, blank=True)
...
遇到的问题
我一开始写的代码是
from django.db.models import F, Avg
xxx = models.xxx.objects.......
.values('xxx')
.annotate(avg_duration=Avg(F('end_time') - F('start_time')))
会报错
'decimal.Decimal' object has no attribute 'tzinfo'
之后使用
from django.db.models import ExpressionWrapper, F, Avg
xxx = models.xxx.objects.......
.values('xxx')
.annotate(avg_duration=ExpressionWrapper(Avg(F('end_time') - F('start_time')), output_field=IntegetField()))
出来的结果很大,几千万,一看就知道不是耗时
最终结果
from django.db.models import DurationField, F, Avg
xxx = models.xxx.objects.......
.values('xxx')
.annotate(avg_duration=Avg(F('end_time') - F('start_time')), output_field=DurationField())
使用DurationField