我使用SQLite,有一个django模型,数据如下:
| 姓名|价值|
| - ------|- ------|
| A类|1个|
| B|第二章|
| B|四个|
| C级|七|
| C级|五个|
我想使用一个聚合我的表,这样我就可以得到我的数据在下面的格式:
| 姓名|价值|
| - ------|- ------|
| A类|1个|
| B|[二、四]|
| C级|[七、五]|
我该怎么对付 Django 。
我想这可能是答案,但Django似乎没有ArrayAgg。这看起来是一个PostgreSQL函数
Test_Model.objects.annotate(dname=ArrayAgg('name')).values()
你知道不使用PostgreSQL我怎么能做到这一点吗?谢谢!
4条答案
按热度按时间7xllpg7q1#
您可以使用
itertools
中的groupby
,然后为任何数据库创建聚合:1cklez4t2#
对于 PostgreSQL,Django有一个**
ArrayAgg
**函数[Django-doc]:juud5qan3#
首先像这样创建自己的聚合
创建后,使用以下查询
0wi1tuuw4#
基于@deepak-tripathi的answer,他们的解决方案返回一个字符串,使用SQLite的
JSON_GROUP_ARRAY
聚合函数和Django的JSONField
返回一个列表:(Don'实际上并不需要覆盖的
__init__()
,除非你想要DISTINCT
的功能,在这种情况下也可以只使用allow_distinct=True
)然后就像@deepak-tripathi说的那样,使用它: