如何在ORM中按查询对结果分组

时间:2019-12-14 15:05:58

标签: django django-models orm django-rest-framework

我可以根据用户模型中的字段对结果分组吗?

models.py

dest

views.py

class User(AbstractUser):
    USERTYPE = (('1','type_1'),('2','type_2'),....)
    user_type = models.CharField(max_length=2,choices=USERTYPE)
    .....

如何仅使用django ORM查询以以下格式获取具有groupby的所有用户数据。

User.object.all().values('first_name','last_name')

1 个答案:

答案 0 :(得分:1)

您不能在查询本身中执行此操作。但是您可以对查询进行一些后处理:

from itertools import groupby
from operator import methodcaller

qs = User.object.order_by('user_type')

result = {
    k: [{ 'first_name': u.first_name, 'last_name': u.last_name } for u in us]
    for k, us in groupby(qs, methodcaller('get_user_type_display'))
}

因此,我们在这里通过user_type字段对查询集进行排序,然后让groupby(..)根据get_user_type_display()方法进行分组。然后,我们可以为每个这样的组创建子列表。