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中的聚合/分组查询/F/Q查询/orm执行原生sql语句/ ORM事务和锁