如何使用 DjangoORM 在 PostgreSQL 9.6 中使用 StringAgg 聚合函数

Aze*_*zee 3 python django postgresql concatenation aggregate-functions

我正在尝试通过一个小组加入一个领域。我可以按照我之前的一个问题中的描述在 MySQL 中处理它。但是,我现在迁移到 PostgreSQL,并且建议的解决方案在 PostgreSQL 9.6 中不起作用。根据Django 文档,可以使用此处此处所述的 StringAgg 。我相信,在较新版本的 PostgreSQL 中,我无法执行以下行:

from django.db.models.sql.aggregates import Aggregate as SQLAggregate
Run Code Online (Sandbox Code Playgroud)

哪个抛出错误:

from django.db.models.sql.aggregates import Aggregate as SQLAggregate
ModuleNotFoundError: No module named 'django.db.models.sql.aggregates'
Run Code Online (Sandbox Code Playgroud)

如何使用StringAgg创建自己的聚合函数?

更新

看来我不需要修改 StringAgg 来计算我需要的东西。我刚刚将其导入为他们的回答中描述的 Exprator :

from django.contrib.postgres.aggregates import StringAgg
Run Code Online (Sandbox Code Playgroud)

并将其与 values() 一起使用以按查询分组。由于字段不是字符串,因此我也必须使用 Cast:

from django.contrib.postgres.aggregates import StringAgg
from django.db.models.functions import Cast
from django.db.models import TextField

query.annotate(
        AggregatedType = StringAgg(Cast('Types', TextField()),delimiter=',')
    )
Run Code Online (Sandbox Code Playgroud)

Exp*_*tor 7

from django.contrib.postgres.aggregates import StringAgg
Run Code Online (Sandbox Code Playgroud)

这是您可以导入聚合函数的方法