我在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']
如何实现这一目标?
答案 0 :(得分: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'
希望有所帮助。
答案 1 :(得分:0)
另一种选择:
correct_answer = []
for i in question:
correct_answer.append(Choice.objects.get(question=i, answer=True).choice_text)
答案 2 :(得分: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