如何从Django中的以下模型中获取choice_text值

时间:2013-09-18 11:34:18

标签: python django list django-queryset

我在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']

如何实现这一目标?

3 个答案:

答案 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

的文档