Как использовать аннотирование для группировки дочерних моделей по родительским моделям? - PullRequest
1 голос
/ 07 февраля 2020

У меня 3 модели. PeerReview Ответ и заявление. У экспертной оценки есть много ответов. Каждый ответ принадлежит утверждению (или вопросу, если хотите)

Я хочу получить все ответы от всех PeerReviews, сгруппированных по их утверждениям. Таким образом, конечным результатом должен быть словарь, в котором ключом является объект оператора, а значением является список всех ответов для этого конкретного оператора. Если бы вы распечатали его, он выглядел бы примерно так:

{Statement A : [answer, answer, answer], Statement B : [answer,answer,answer], Statement C : etc etc}

Я знаю, что для группирования по запросам я должен использовать метод annotate(), но все примеры, которые я нахожу, о подсчете и сумме действий. Как использовать аннотирование, чтобы получить вышеупомянутый словарь в результате?

Спасибо

1 Ответ

1 голос
/ 07 февраля 2020

Если я понимаю, что вы хотите, вам нужно использовать обратную связь по внешнему ключу.

statements = Statement.objects.prefetch_related('answer_set__peer_review')

Если вам нужен словарь, то это сделает это:

mapping = {s: list(s.answer_set.all()) for s in statements}
...