Django查询多对一关系

kel*_*fix 4 django django-models

我有三个模型,一个主题可以有零个或多个问题,一个问题可以有零个或多个答案.只有一个答案是对的.

他们是多对一的关系.

class Topic(models.Model):

class Question(models.Model):
    topic = models.ForeignKey(Topic)

class Answer(models.Model):
    question = models.ForeignKey(Question) 
    isright = models.BooleanField(verbose_name='Right')
Run Code Online (Sandbox Code Playgroud)

现在我尝试基于主题循环问题,我怎样才能用模板实现它?

<topic>

  <question>
    <answer>
    <answer>
    <answer>
    <answer>

  <question>
    <answer>
    <answer>
    <answer>
    <answer>
Run Code Online (Sandbox Code Playgroud)

如何为问题添加分页器?

paginator = Paginator(topic.question_set.all(), 25) 
Run Code Online (Sandbox Code Playgroud)

Don*_*Don 5

如果我理解得很好,你想循环"主题"排序的答案:

answers = Answer.objects.order_by('question__topic', 'question')
Run Code Online (Sandbox Code Playgroud)

要么:

for topic in Topic.objects.all():
    for question in topic.question_set.all():
        for answer in question.answer_set.all():
            ...do something...
Run Code Online (Sandbox Code Playgroud)

在模板中,您可以执行相同操作,将变量提供topics为Topic.objects.all():

{% for topic in topics %}
    {% for question in topic.question_set.all %}
        {% for answer in question.answer_set.all %}
            ...do something...
        {% endfor %}
    {% endfor %}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)