使用Django ORM过滤计数

Sta*_*kis 8 django orm aggregate

我有一个查询基本上"计算X类型的所有项目,并返回不止一次存在的项目及其计数".现在我有这个:

Item.objects.annotate(type_count=models.Count("type")).filter(type_count__gt=1).order_by("-type_count")
Run Code Online (Sandbox Code Playgroud)

但它什么都不返回(所有项目的计数都是1).我究竟做错了什么?

理想情况下,它应该得到以下内容:

Type
----
1
1
2
3
3
3
Run Code Online (Sandbox Code Playgroud)

并返回:

Type, Count
-----------
1     2
3     3
Run Code Online (Sandbox Code Playgroud)

Dan*_*man 16

为了计算每种类型的出现次数,您必须按type字段分组.在Django中,这是通过使用values来获得该字段来完成的.所以,这应该工作:

Item.objects.values('group').annotate(
     type_count=models.Count("type")
).filter(type_count__gt=1).order_by("-type_count")
Run Code Online (Sandbox Code Playgroud)