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 中。
我正在尝试按使用聚合计算的值进行过滤。目前我正在这样做:
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 中。