我试图按使用聚合计算的值进行过滤。目前我这样做:
max_val = some_queryset.aggregate(max_val=Max('some_prop'))['max_val']
some_queryset.filter(some_prop=max_val)
我有没有办法使用max_val
进行过滤,所有这些都是在一次查询中完成的?
不幸的是我正在使用Django 1.4。不,我无法更新它,这根本不取决于我。
答案 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
。