Django - 加入两个模型的最佳实践

时间:2013-08-16 15:04:59

标签: python django models

我正在开发一个项目,允许用户根据一些随机问题进行测试。 我的models.py有这两个类:

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]

通过这种方法我只有问题,但我也想要与每个问题相关的答案,我找到了一些解决方案,但我想知道什么是获得问题和相关答案的最佳做法?我可以将它们添加到问题构造函数吗?

谢谢!

1 个答案:

答案 0 :(得分: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)

只有2个db调用,而不是21个

(对于一大堆问题,请使用itertools来获得答案。以获得更好的效果)