美文网首页js css html
Django 技巧之 ArrayAgg

Django 技巧之 ArrayAgg

作者: alue | 来源:发表于2023-02-07 13:20 被阅读0次

PostgreSQL 提供了聚合类 ArrayAgg, 能够方便的完成列表的聚合.

Returns a list of values, including nulls, concatenated into an array, or default if there are no values.

例如

class Item(models.Model):  
    name = models.CharField(max_length=20)
    
class A(models.Model):  
    name = models.CharField(max_length=20)
    items = models.ManyToManyField(to=Item)

打算将A模型序列化成以下形式

[
    {
        "id": 1,
        "name": "名称1",
        "item_list": [ 410,415,416]
    },
    {
        "id": 2,
        "name": "名称2",
        "item_list": [ 411,415,416]
    },
]

也就是说, 将 ManyToManyField 这种外键直接序列化成列表形式. 这时候可以采用下述方式

A.objects.annotate(
            item_list=ArrayAgg('items',distinct=True)).values(
            'id', 'name', 'item_list')

非常简洁优雅,且这是数据库底层支持的函数, 所有运行效率也非常高.
可以看出, Django项目采用 PostgreSQL 作为数据库还是非常有价值的.

相关文章

网友评论

    本文标题:Django 技巧之 ArrayAgg

    本文链接:https://www.haomeiwen.com/subject/ooaxkdtx.html