在Django中,PostgreSQL特定函数ArrayAgg不支持多个字段?

时间:2017-02-19 14:51:26

标签: sql django database postgresql django-queryset

ArrayAgg是否仅支持单个字段?

我注意到django中ArrayAgg生成的sql命令在array_agg()中没有括号,它只是array_agg('field1','field2'),这导致多个字段的语法错误,并且只是字面上只支持单个字段。我认为array_agg(('field1','field2'))可以支持多个字段。

任何人都知道ArrayAgg是否真的支持单个字段。如果有任何方法可以在Django中实现相同的功能。感谢

查询:

Organisation.objects.values('id').annotate(results=ArrayAgg('phones__number','phones__kind','phones__comment'))

connection.queries:

SELECT "iss_organisation"."id", ARRAY_AGG("iss_phone"."number", "iss_phone"."kind", "iss_phone"."comment") AS "results" FROM "iss_organisation" LEFT OUTER JOIN "iss_phone" ON ("iss_organisation"."id" = "iss_phone"."object_id" AND ("iss_phone"."content_type_id" = 37)) GROUP BY "iss_organisation"."id"

ProgrammingError:函数array_agg(字符变化,字符变化,字符变化)不存在 第1行:SELECT" iss_organisation"。" id",ARRAY_AGG(" iss_phone"。" numbe ...                                         ^ 提示:没有函数匹配给定的名称和参数类型。您可能需要添加显式类型转换。

我认为如果ARRAY_AGG("iss_phone"."number", "iss_phone"."kind", "iss_phone"."comment")可以替换为ARRAY_AGG(("iss_phone"."number", "iss_phone"."kind", "iss_phone"."comment")),那就可以了。

1 个答案:

答案 0 :(得分:0)

请阅读>>> Parent.objects.first().total_childrens 29 >>> ' documentation以更好地了解该功能的工作原理。