我的查询基本上是“计算X类型的所有项目,并返回不止一次存在的项目及其计数”。现在我有这个:
Item.objects.annotate(type_count=models.Count("type")).filter(type_count__gt=1).order_by("-type_count")
但它不返回任何内容(所有项目的计数均为1)。我做错了什么?
理想情况下,它应该得到以下结果:
Type
----
1
1
2
3
3
3
并返回:
Type, Count
-----------
1 2
3 3
答案 0 :(得分:16)
为了计算每种类型的出现次数,您必须按type
字段进行分组。在Django中,这是通过使用values
来获得该字段来完成的。所以,这应该有效:
Item.objects.values('group').annotate(
type_count=models.Count("type")
).filter(type_count__gt=1).order_by("-type_count")
答案 1 :(得分:2)
这是逻辑错误;)
type_count__gt=1
表示type_count > 1
,如果count == 1
将不会显示:)
请改用type_count__gte=1
- 表示type_count >= 1
:)