我有一个模型Application,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
)
Run Code Online (Sandbox Code Playgroud)
但我收到此错误:
用作表达式的子查询返回的多行
本values_list应返回值的数组,所以我不知道为什么多行正从我的子查询返回的。任何指针?谢谢。
首先,在大多数(所有)数据库中,数组通常不是一个很好实现的结构,所以我建议尽可能远离它。特别是因为它将行数据结构化为单列,这使得执行JOINs 等变得更加困难。
但是如果你真的想要这个,你可以使用ArrayAgg聚合函数。然而,这是PostgreSQL 特定的功能,因此您失去了选择另一个数据库系统的自由。
然后,您可能可以通过以下方式获得这样的结果:
from django.contrib.postgres.aggregates import ArrayAgg
Application.objects.annotate(
score_array=ArrayAgg('judge__total_score')
)Run Code Online (Sandbox Code Playgroud)
所以这不需要SubQuery.
| 归档时间: |
|
| 查看次数: |
2876 次 |
| 最近记录: |