我查询一个模型:
Members.objects.all()
然后它返回:
Eric, Salesman, X-Shop
Freddie, Manager, X2-Shop
Teddy, Salesman, X2-Shop
Sean, Manager, X2-Shop
我想知道最好的 Django 开火方式
group_by
查询我的数据库,例如:
Members.objects.all().group_by('designation')
这当然行不通。
我知道我们可以在 django/db/models/query.py
上做一些技巧,但我只是想知道如何在不打补丁的情况下做到这一点。
最佳答案
如果您要进行聚合,您可以使用 aggregation features of the ORM :
from django.db.models import Count
result = (Members.objects
.values('designation')
.annotate(dcount=Count('designation'))
.order_by()
)
这会产生类似于
的查询SELECT designation, COUNT(designation) AS dcount
FROM members GROUP BY designation
输出格式为
[{'designation': 'Salesman', 'dcount': 2},
{'designation': 'Manager', 'dcount': 2}]
如果您不包含 order_by()
,如果默认排序不是您所期望的,您可能会得到不正确的结果。
如果要在结果中包含多个字段,只需将它们作为参数添加到 values
,例如:
.values('designation', 'first_name', 'last_name')
引用资料:
- Django 文档:
values()
,annotate()
, 和Count
- Django 文档:Aggregation ,尤其是标题为 Interaction with default ordering or
order_by()
的部分
关于python - 如何在 Django 中查询为 GROUP BY?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/629551/