1

これを行うためのより良い方法はありますか

questionobjects = Questions.objects.all()
for questionobject in questionobjects:
        answerobjects = Answers.objects.filter(question=questionobject.id).count()

上記のクエリAnswersモデルでは、と外部キーの関係がありQuestionsます。ただし、上記のスクリプトでは、クエリ回答クエリは質問オブジェクトの数に基づいて実行されます。

10個のquestionobjectがあり、10個の個別のanswerobjectクエリが実行されるとします。質問オブジェクトの数が増えると、回答オブジェクトのクエリの数も増えるため、問題になるため、単一のクエリでこれを行う方法はありますか?

4

2 に答える 2

6

したがって、実際の回答オブジェクトを取得するのではなく、回答の数だけを気にしているように見えます。これは、注釈を使用して行うことができます。

from django.db.models import Count
Question.objects.all().annotate(Count('answers'))
于 2012-06-07T11:10:03.113 に答える
4

アノテーションを見てください:Djangoアノテーション

from django.db.models import Count
questions = Questions.objects.annotate(count=Count('answers'))

次に、でカウントにアクセスできます[q.count for q in questions]

于 2012-06-07T11:10:57.220 に答える