gpt4 book ai didi

Django:在子查询中返回数组

转载 作者:行者123 更新时间:2023-11-29 11:34:02 26 4
gpt4 key购买 nike

我有一个模型 Application,它有许多通过 ForeignKey 分配给它的 Judge 对象。每个Judge 都会对Application 进行评分。我想返回 QuerySet 中的应用程序列表以及每个分值的数组。以下是我正在尝试实现的方法:

total_scores = Subquery(
Judge.objects
.filter(
application=OuterRef('pk')
)
.values_list(
'total_score',
flat=True
)
)

applications = Application.objects \
.annotate(
score_array=total_scores
)

但是我得到这个错误:

more than one row returned by a subquery used as an expression

values_list 应该返回一个值数组,所以我不确定为什么从我的子查询返回多行。任何指针?谢谢。

最佳答案

首先,在大多数(所有)数据库中,数组通常不是一个很好实现的结构,所以我建议尽可能远离它。特别是因为它将按行的数据结构化为单个列,这使得执行 JOIN 等变得更加困难。

但是如果你真的想要这个,你可以使用 ArrayAgg聚合函数。然而,这是 PostgreSQL 特定功能,因此您失去了选择其他数据库系统的自由。

然后你可能会得到这样的结果:

from django.contrib.postgres.aggregates import <b>ArrayAgg</b>

Application.objects.annotate(
score_array=<b>ArrayAgg('judge__total_score')</b>
)

所以这不需要子查询

关于Django:在子查询中返回数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51102389/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com