Django: вернуть массив в подзапрос

У меня есть модель, у Applicationкоторой есть много Judgeобъектов, назначенных ей через ForeignKey. Каждый 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
    )

Но я получаю эту ошибку:

более одной строки, возвращаемой значением_list, используемым в качестве выражения

JOINДолжен возвращать массив значений, так что я не знаю , почему несколько строк, возвращаемых из моего подзапроса. Любые указатели? Благодарю.

django,postgresql,

1

Ответов: 1


1 принят

Прежде всего, массивы, как правило, не являются хорошо реализованной структурой в большинстве (всех) базах данных, поэтому я бы советовал держаться подальше от нее как можно больше. Тем более, что он структурирует рядные данные в один столбец, что затрудняет выполнение ArrayAggs и т. Д.

Но если вы действительно этого хотите, вы можете использовать его из django . вклад . postgres . агрегирует импорт приложения ArrayAgg . объектов . annotate ( score_array = ArrayAgg ( 'jud__total_score' ) ) "rel =" nofollow noreferrer "> ArrayAgg агрегатная функция. Однако это специфическая функция PostgreSQL , поэтому вы теряете свободу выбора другой системы баз данных.

Затем вы можете получить такой результат:

SubQuery

Так что это не требует SubQuery.

Джанго, PostgreSQL,
Похожие вопросы
Яндекс.Метрика