Django-计算介于created_at和done_at之间的平均时间

时间:2018-06-28 12:30:22

标签: python django

可以说我在db中有100个对象,每个对象都有created_atdone_at时间。我想计算所有对象的持续时间平均值。有这样的想法:首先计算所有对象的持续时间,然后求平均值。但是还有其他好的方法会有所帮助吗?

3 个答案:

答案 0 :(得分:2)

您可以为此使用aggregate()F expressions

from django.db.models import Avg, F

Model.objects.aggregate(average_delta=Avg(F('done_at') - F('created_at')))

答案 1 :(得分:1)

除了this answer之外,您还可以尝试

from django.db.models import Avg, F

Model.objects.annotate(diff=F('done_at') - F('created_at')).aggregate(duration=Avg('diff'))

答案 2 :(得分:0)

使用Jieter和Jerin Peter George的答案几乎没有变化,并且效果很好:

from django.db.models import Avg, F, Sum, DurationField

IssueDone.objects.annotate(time_elapsed=Sum(Cast(F('done_date')-F('created_date'), DurationField()))).aggregate(Avg('time_elapsed'))