Django 如何在orm中按查询对结果进行分组

Django 如何在orm中按查询对结果进行分组,django,django-models,orm,django-rest-framework,Django,Django Models,Orm,Django Rest Framework,我可以根据用户模型中的字段对结果进行分组吗 型号.py class User(AbstractUser): USERTYPE = (('1','type_1'),('2','type_2'),....) user_type = models.CharField(max_length=2,choices=USERTYPE) ..... User.object.all().values('first_name','last_name') 视图.py class User(

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

型号.py

class User(AbstractUser):
    USERTYPE = (('1','type_1'),('2','type_2'),....)
    user_type = models.CharField(max_length=2,choices=USERTYPE)
    .....
User.object.all().values('first_name','last_name')
视图.py

class User(AbstractUser):
    USERTYPE = (('1','type_1'),('2','type_2'),....)
    user_type = models.CharField(max_length=2,choices=USERTYPE)
    .....
User.object.all().values('first_name','last_name')
如何仅使用django ORM查询获取groupby的所有用户数据?请键入以下格式

{  
   "type_1":[  
      {  
         "first_name":"abc",
         "last_name":"xzy"
      },
      {  
         "first_name":"abcd",
         "last_name":"wxzy"
      }
   ],
   "type_2":[  
      {  
         "first_name":"abcdd",
         "last_name":"xzddy"
      },
      {  
         "first_name":"absdcd",
         "last_name":"wxsdzy"
      }
   ]
}

您不能在查询本身中这样做。但您可以对查询进行一些后处理:

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\u type
字段对查询集进行排序,然后让
groupby(…)
根据
get\u user\u type\u display()
方法进行分组。然后我们可以为每个这样的组创建子列表