【问题标题】:Django - Best practice to join two modelsDjango - 加入两个模型的最佳实践
【发布时间】:2013-08-16 15:04:59
【问题描述】:

我正在开发一个项目,允许用户根据一些随机问题进行测试。 我的 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]

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

谢谢!

【问题讨论】:

    标签: python django models


    【解决方案1】:

    您可以按照@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 个数据库调用而不是 21 个

    (对于非常多的问题,请使用itertools 获取答案。以获得更好的性能)

    【讨论】:

    • 你可以这样做questions.values_list('id', flat=True)
    • 但他不会拥有 Question 对象
    猜你喜欢
    • 2014-07-05
    • 1970-01-01
    • 1970-01-01
    • 2011-01-23
    • 2015-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多