Django:按聚合过滤

Django: filter by aggregate

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

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

有没有一种方法可以使用 max_val 进行过滤,所有这些都在一个查询中完成?

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

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

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

您可能需要从聚合查询中填充 max_val

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

from django.db.models import F, Max

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

注释和 F expressions 存在于 Django 1.4 中。