Django group by通过带注释的字段过滤后产生错误的结果

时间:2019-01-15 19:39:02

标签: django django-models django-queryset django-orm

所以,我主要想将结果按某个我知道可以喜欢的特定字段分组

ModelName.objects.values('somefield').annotate(freq=Count('somefield'))

但是在那之前,我想基于一个带注释的字段进行过滤,但是这样做会产生错误的结果,

# Works fine
filtered_queryset = ModelName.objects.annotate(c=Count('related_field')).filter(c__gt=0)
# Yields wrong result.
filtered_queryset.values('somefield').annotate(freq=Count('somefield')) 

我尝试通过distinct=True,但这不能解决我的问题。 为什么我在这里想念?

1 个答案:

答案 0 :(得分:1)

您是否偶然有一个已定义的ModelName.Meta.ordering

如果是这种情况,那么您将需要order_by()清除它,否则引用的列也将包含在GROUP BY子句中。

顺便说一下,这是一个常见的步枪,并且将获得warned about in Django 2.2 and removed in Django 3.1