Django:按聚合过滤

时间:2017-07-13 09:47:10

标签: python django django-1.4

我试图按使用聚合计算的值进行过滤。目前我这样做:

max_val = some_queryset.aggregate(max_val=Max('some_prop'))['max_val']
some_queryset.filter(some_prop=max_val)

我有没有办法使用max_val进行过滤,所有这些都是在一次查询中完成的?

不幸的是我正在使用Django 1.4。不,我无法更新它,这根本不取决于我。

2 个答案:

答案 0 :(得分:2)

您可以使用F表达式对新字段进行注释并与汇总字段中的值进行比较:

from django.db.models import F 

some_queryset.annotate(max_val=Max('some_prop')).filter(max_val=F('another_prop'))

Django 1.4中存在注释和F表达式。

答案 1 :(得分:-1)

我不知道这是否适用于django 1.4,但如果你需要进一步过滤它,你需要使用注释。

some_queryset.annotate(max_val=Max('some_prop')).filter(max_val=max_val)

您可能需要从汇总查询中填充max_val