1

私はDjangoでこのようなモデルを持っています:

class Choice(models.Model):

    question = models.ForeignKey(Question)
    choice_text = models.CharField(max_length=150)
    answer = models.BooleanField(blank=False, default=False)

次のようなリストに質問があります。[1, 2]

今、私はその正しい答えを得たいと思っていますquestion。だから、私はこれが好きです:

>>> for i in question:
...     Choice.objects.filter(question=i, answer=True)
... 
[<Choice: yes>]
[<Choice: ok1>]

このように代わりに、次のように正解をリストに載せたい:

correct_answer = ['yes', 'no']

これを達成する方法は?

4

3 に答える 3

0

ループ内で複数のクエリを作成する代わりに、in. 次に、結果を反復処理して、choice_textが と等しいかどうかを確認しyesます。

choices = Choice.objects.filter(question_id__in=[1,2], answer=True)
for choice in choices:
    print choice.question_id, choice_text if choice_text == 'yes' else 'no'

それが役立つことを願っています。

于 2013-09-18T11:38:08.807 に答える
0

だけのフラットリストが必要な場合は、パラメーターでchoice_text使用できます。例えば:.values_list()flat=True

correct_answer = Choice.objects.filter(question=i, answer=True).values_list('choice_text', flat=True)
# correct_answer will be ['yes', 'no'] or whatever the choice_text's are.

ここにドキュメントがあります.values_list(): https://docs.djangoproject.com/en/dev/ref/models/querysets/#values-list

于 2013-09-18T11:53:01.153 に答える
0

別のオプション:

correct_answer = []
for i in question:
    correct_answer.append(Choice.objects.get(question=i, answer=True).choice_text)
于 2013-09-18T11:40:39.823 に答える