私信  •  关注

Lucas Weyne

Lucas Weyne 最近创建的主题
Lucas Weyne 最近回复了
6 年前
回复了 Lucas Weyne 创建的主题 » Django模型两个DateTimeFields之间的运行时间

使用 annotate() 计算 duration 查询时QuerySet中每个对象的字段

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

timesheets = Timesheet.objects.annotate(
    duration=ExpressionWrapper(
        F('endTime') - F('startTime'),
        output_field=fields.DurationField()
    )
)

timesheets[0].duration  # datetime.timedelta(0, 722, 18373)

可以对注释执行另一个queryset方法,如 filter() , order_by() , aggregate() 等。

timesheets.order_by('-duration')  
timesheets.aggregate(Avg('duration')) # {'duration__avg': datetime.timedelta(0, 26473, 292625)}