如何在Django中计算聚合的平均值

Esc*_*her 3 django django-queryset

如果我有一个汇总,是否可以在查询中获得平均值,而无需在python内存中进行计算?

from django.db.models import F, Sum, FloatField, Avg
Model.objects.filter(...)\
    .values('id')\
    .annotate(subtotal=Sum(...math here...), output_field=FloatField())\
    .annotate(total=Avg(F('subtotal'))) #this line throws a FieldError
Run Code Online (Sandbox Code Playgroud)

有什么方法可以获取查询Avg中的subtotal值?这给了我一个错误,不允许我在Avg聚合(“ subtotal”)上进行计算,但是.values('id')由于.annotate(...math here...)内部的操作不是分布式的Model对象,所以无法替换分组。

Vla*_*lov 5

from django.db.models import F, Sum, FloatField, Avg
Model.objects.filter(...)\
    .values('id')\
    .annotate(subtotal=Sum(...math here..., output_field=FloatField()))\
    .aggregate(total=Avg(F('subtotal')))
Run Code Online (Sandbox Code Playgroud)

聚合注释。注意:output_field是的参数Sum,不是annotate()