我查询一个模型:
Members.objects.all()
然后它返回:
Eric, Salesman, X-Shop
Freddie, Manager, X2-Shop
Teddy, Salesman, X2-Shop
Sean, Manager, X2-Shop
我想知道Django开火的最佳方式
Members.objects.all().group_by('designation')
当然,这是行不通的.
我查询一个模型:
Members.objects.all()
然后它返回:
Eric, Salesman, X-Shop
Freddie, Manager, X2-Shop
Teddy, Salesman, X2-Shop
Sean, Manager, X2-Shop
我想知道Django开火的最佳方式
Members.objects.all().group_by('designation')
当然,这是行不通的.
如果要进行聚合,可以使用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')
values()
、annotate()
和Count
order_by()
的章节