Django ArrayAgg()返回字符串表示,而不是列表

Django ArrayAgg()返回字符串表示,而不是列表,django,django-orm,django-postgresql,Django,Django Orm,Django Postgresql,我希望可以使用数组聚合对QuerySet进行注释,我尝试了以下方法: Item.objets.annotate( results=ArrayAgg( RawSQL("row(field_a, field_b)", []), output_field=ArrayField(ArrayField(models.IntegerField()))) ) ) 它基本上是有效的,除非我返回一维数组,否则我只得到PostgreSQL数组表示的字符串作

我希望可以使用数组聚合对QuerySet进行注释,我尝试了以下方法:

Item.objets.annotate(
    results=ArrayAgg(
        RawSQL("row(field_a, field_b)", []),
            output_field=ArrayField(ArrayField(models.IntegerField())))
    )
) 
它基本上是有效的,除非我返回一维数组,否则我只得到PostgreSQL数组表示的字符串作为返回值:

'{"(30,8686)"}' instead of [(30,8686)]

有没有人知道如何获得我可以在模板中迭代的适当Python列表?

我将结果分组在一起,每个结果都有一个值(
字段a
)和一个事件id(
字段b
)。我不想迭代模板中的每一行以避免N+1性能问题。ArrayAg()正是这样做的,但由于我不仅需要一个列表,而且还需要一个元组列表,所以我还需要
row()
在数组中放入两个值。请放心,这不是过早的优化。上面的例子非常简单。实际上,有大约300个返回的条目,我不想为每个条目运行单独的查询,只是为了得到子条目的列表。如果没有这种聚合,视图速度会降低几秒钟。数据库正是针对这种用例进行优化的。所有的繁重工作都应该在数据库中进行。请看:我的观点是,他们所谈论的与这个用例非常不同。您是否确实尝试在控制台中运行从当前查询生成的sql并对其进行解释分析。然后尝试数组agg查询(以原始形式),看看结果是否确实有很大差异您是否尝试过使用
model.objects.values\u list()
?我将结果分组在一起,每个结果都有一个值(
field\u a
)和一个事件id(
field\u b
)。我不想迭代模板中的每一行以避免N+1性能问题。ArrayAg()正是这样做的,但由于我不仅需要一个列表,而且还需要一个元组列表,所以我还需要
row()
在数组中放入两个值。请放心,这不是过早的优化。上面的例子非常简单。实际上,有大约300个返回的条目,我不想为每个条目运行单独的查询,只是为了得到子条目的列表。如果没有这种聚合,视图速度会降低几秒钟。数据库正是针对这种用例进行优化的。所有的繁重工作都应该在数据库中进行。请看:我的观点是,他们所谈论的与这个用例非常不同。您是否确实尝试在控制台中运行从当前查询生成的sql并对其进行解释分析。然后尝试数组agg查询(以原始形式),看看结果是否确实有很大差异您是否尝试过使用
model.objects.values\u list()