1

ユーザーがいくつかのランダムな質問に基づいてテストを作成できるようにするプロジェクトを開発しています。私の models.py には、次の 2 つのクラスがあります。

class Question(models.Model):
    content = models.CharField()
    ...

class Answer(models.Model):
    content = models.CharField()
    isCorrect = models.BooleanField()
    question = models.ForeignKey(Question)

そして、views.py で、次のクエリを使用して 20 個のランダムな質問を取得します。

questions = Question.objects.order_by('?')[:20]

このアプローチでは、質問しかありませんが、すべての質問に関連する回答も必要です.いくつかの解決策を見つけましたが、質問と関連する回答を取得するためのベストプラクティスは何ですか? それらを Question コンストラクターに追加できますか?

ありがとう!

4

1 に答える 1

2

@karthikr が言ったように実行できますが、質問ごとに追加のデータベース呼び出しが行われます。

私はおそらくこのようにします:

questions = Question.objects.order_by('?')[:20]
answers = Answer.objects.filter(question__in=questions)

#some databases will not suppoert this, so use:
#answers = Answer.objects.filter(question_id__in=[q.id for q in questions])

for question in question:
    answers_for_question = filter(lambda answer:answer.question_id = question_id, answers)

21 ではなく 2 db 呼び出しのみです。

(非常に大きな一連の質問については、itertoolsを使用して回答を取得してください。パフォーマンスをさらに向上させます)

于 2013-08-16T15:23:35.020 に答える