Django 查询聚合成字典列表

Posted

技术标签:

【中文标题】Django 查询聚合成字典列表【英文标题】:Django query aggregation into list of dicts 【发布时间】:2021-12-18 07:53:54 【问题描述】:

我正在使用 Django 和 Postgres,并且我有当前的设置(模型):

A 类: 名称=models.CharField() b=models.ManyToManyField(to=B)

B 类: c=外键(to=C) 数量=models.IntegerField()

我需要创建一个查询,从 A 开始,将 B 中的所有值作为字典列表返回。 我尝试了 JSONBagg 和 ArrayAgg,但在尝试保存多个字段时没有运气。

查询示例: 从 django.contrib.postgres.aggregates.general 导入 JSONBagg A.objects.annotate(test=JSONBagg('amount')).values('name', 'test') 有效! A.objects.annotate(test=JSONBAgg('amount', 'c__id')).values('name', 'test') 不起作用!

如何获取具有多个值的字典列表而不是字符串列表?

【问题讨论】:

你能把你的模型和视图贴在这里,这样回答会更清楚 请显示您的实际模型定义以及您对输出的尝试。 【参考方案1】:

也许这个代码在我申请时会起作用,所以它起作用了。

res = defaultdict(list)
for sub in test_list:
    for key in sub:
        res[key].append(sub[key])
      
print("The extracted dictionary : " + str(dict(res)))

【讨论】:

以上是关于Django 查询聚合成字典列表的主要内容,如果未能解决你的问题,请参考以下文章

Django 06

Django中的聚合/分组查询/F/Q查询/orm执行原生sql语句/ ORM事务和锁

Django - 使用 get_FOO_display 聚合

使用聚合接口获取汉字数据字典

Django之ORM-补充

Python中的字典分组和聚合列表