使用 Django ORM 过滤计数
我有一个查询,基本上是“计算 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
I have a query that's basically "count all the items of type X, and return the items that exist more than once, along with their counts". Right now I have this:
Item.objects.annotate(type_count=models.Count("type")).filter(type_count__gt=1).order_by("-type_count")
but it returns nothing (the count is 1 for all items). What am I doing wrong?
Ideally, it should get the following:
Type
----
1
1
2
3
3
3
and return:
Type, Count
-----------
1 2
3 3
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
为了计算每种类型的出现次数,您必须按
type
字段进行分组。在 Django 中,这是通过使用values
获取该字段来完成的。所以,这应该有效:In order to count the number of occurrences of each type, you have to group by the
type
field. In Django this is done by usingvalues
to get just that field. So, this should work:这是逻辑错误;)
type_count__gt=1
意味着type_count > 1
因此,如果count == 1
则不会显示:)使用
type_count__gte=1
代替 - 这意味着type_count >= 1
:)It's logical error ;)
type_count__gt=1
meanstype_count > 1
so if thecount == 1
it won't be displayed :)use
type_count__gte=1
instead - it meanstype_count >= 1
:)