【问题标题】:How to group result by query in ormorm中如何通过查询对结果进行分组
【发布时间】:2020-04-07 17:11:01
【问题描述】:

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

models.py

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

views.py

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

如何使用 groupby 获取所有用户数据,仅使用 django ORM 查询输入以下格式..

{  
   "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"
      }
   ]
}

【问题讨论】:

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


    【解决方案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() 方法进行分组。然后我们可以为每个这样的组创建子列表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-14
      • 2016-12-06
      • 2014-01-25
      • 2019-12-23
      • 1970-01-01
      • 1970-01-01
      • 2021-01-30
      • 1970-01-01
      相关资源
      最近更新 更多