当前位置: 首页 > 面试题库 >

Django GROUP BY字段值

梁英喆
2023-03-14
问题内容

令人惊讶的是,我找不到一种通过查询进行分组的方法。

我有一个查询集qs,我试图通过组some_prop.val,考虑qs被排除的条目,其中some_propNone

假设值是[1, 2, 3],那么我将是这样的结果:

{1: entries1, 2: entries2, 3: entries3}

Django ORM是否提供任何功能来对结果进行分组?


问题答案:

(据我所知)没有特定的Django ORM方式,但是您可以执行以下操作以按字段值分组的条目字典:

  1. 使用.values_list()withflat=True获取数据库中现有值的列表(如果您事先不知道它们的话)。也.distinct()可以消除重复的值,因为我们不在乎那些值:

    value_list = MyModel.objects.values_list(
    'interesting_field', flat=True
    

    ).distinct()

  2. 现在遍历value_list并填充您的字典:

    group_by_value = {}
    

    for value in value_list:
    group_by_value[value] = MyModel.objects.filter(interesting_field=value)

现在,group_by_valuedictionary包含您中的不同值interesting_field和queryset对象的值作为键,每个值都包含MyModelwith的条目interesting_field=a value from value_list

出于评论遗留原因,将其留在此处。

我在其中提出了一个Q&A样式示例,该示例模拟了COUNT ... GROUP BYSQL查询。

本质上,您需要利用.order_by进行分组和.annotate()依靠模型的.values()

这是上述示例:

我们可以执行COUNT ... GROUP BY对Django的ORM
SQL等效查询,与使用annotate()values()order_by()
django.db.modelsCount方法:

让我们的模型为:

class Books(models.Model):
    title  = models.CharField()
    author = models.CharField()

假设我们要计算Book表中每个独立作者有多少本书对象:

result = Books.objects.values('author')
                      .order_by('author')
                      .annotate(count=Count('author'))

现在结果包含一个包含两列的查询集:author和count:

  author    | count
------------|-------  
 OneAuthor  |   5
OtherAuthor |   2  
   ...      |  ...


 类似资料:
  • 字段 规则匹配 XPATH匹配 JSON提取 其他 规则匹配 添加、编辑字段时使用规则匹配可精准获取目标页面的数据 “规则”支持:(*)(通配符)、正则表达式,使用[内容](通用匹配)或捕获组(正则捕获组)将匹配的数据保存为标签,在“拼接内容”中引用[内容N]标签组成结果 [内容]和捕获组的区别:[内容]会自动转换成固定格式捕获组:(?<content>.*?) 而捕获组:(?<content>[

  • 注:内容翻译自官网文档 Fields 除了在前一节描述的方法之外,protocol buffer编译器为在.proto文件中定义的消息的每个字段生成访问器方法集合。读取字段的方法被定义在消息类和它对应的builder上,修改值的方法仅在builder上被定义。 注意方法名称通常使用驼峰法命名,就是在.proto文件中的字段名使用带下划线的小写(应该如此)。转换工作如下: 对于名字中的每个下划线,下

  • 本章内容为V5.1.4+版本开始支持,可以更为方便的操作模型的JSON数据字段。 这里指的JSON数据包括JSON类型以及JSON格式(但并不是JSON类型字段)的数据 我们修改下User模型类 <?php namespace app\index\model; use think\Model; class User extends Model { // 设置json类型字段 pr

  • JSON字段 从V5.1.4+版本开始,强化了JSON字段的操作支持。 如果你的user表有一个info字段是JSON类型的(或者说你存储的是JSON格式,但并非是要JSON字段类型),你可以使用下面的方式操作数据。 JSON数据写入 $user['name'] = 'thinkphp'; $user['info'] = [ 'email' => 'thinkphp@qq.com',

  • 例如,endpoint 因此,如果有人将以下json发送到我的endpoint,endpoint应该接受它 但如果发送以下json,则失败,因为它不包含。

  • 本文向大家介绍在django中实现choices字段获取对应字段值,包括了在django中实现choices字段获取对应字段值的使用技巧和注意事项,需要的朋友参考一下 我就废话不多说了,大家还是直接看代码吧~ object.get_level_display() 补充知识:在Django中显示操作数据库的语句 需要在配置中加上这个 这样执行命令的时候,就会在控制台打印相应的sql语句了 以上这篇在

  • 我试图制作一个方法,获取封闭实例中的任何字段,对于一对2D坐标(其字段名以“X”结尾)的任何“X”组件具有整数值。 但我在编译器中得到的只是: 方法将这样使用: 我做错了什么?

  • null 我看到的是一般的注释 可用于排除空值。我不能使用此方法,因为我仍然希望在json中看到具有空值的空字段 可以用来排除空值和“不存在”的值。我不能使用这个,因为我仍然想看到JSON中的空字段和空字段。与相同 所以我的问题是,如果我不指定这些属性中的任何一个,我能实现我想要的吗?换句话说,如果我没有指定其中的任何一个,那么Jackson的行为是显示所有在动态意义上具有空值的字段吗?我主要关心