在Django模板中显示多个相关的类

时间:2014-01-09 10:44:11

标签: python django django-queryset

我有以下由外键相关的名为A和B的模型类。因此B有关于外键的A链接。我现在想要遍历A,拉出可能众多的B类。现在是扭曲,在模板中显示这些的最明智的方法是什么?

class A(models.Model):
   field1 = models.CharField(max_length=30)


class B(models.Model):
  aAID = models.ForeignKey(A)
  field1 = models.CharField(max_length=30)

现在,在我获得查询集时,获取A非常简单,即

alla = A.objects.all().order_by("-date")

然后我可以通过渲染将其发送到模板并循环遍历alla,但是我怎么能在该模板中设法遍历找到的B类。

3 个答案:

答案 0 :(得分:3)

您可以使用自动创建的经理a.b_set

>>> for a in A.objects.all():
>>>     for b in a.b_set.all():
>>>         print b.field1

或在模板中:

{% for a in alla %}
    {% for b in a.b_set.all %}
        {{ b.field1 }}
    {% endfor %}
{% endfor %}

另请查看the official documentation

答案 1 :(得分:2)

A类具有b_set属性,可返回相关的B个对象。

您可以在模板中使用此属性:

{% for a in alla %}
  {{ a }}
  {% for b in a.b_set.all %}
    {{ b }}
  {% endfor %}
{% endfor %}

引用一个伟人(和Django documentation):

  

在模型中定义关系时(即ForeignKey,   OneToOneField或ManyToManyField),该模型的实例将具有   一个方便的API来访问相关的对象。

     

[...]

     

Django还为“其他”方创建了API访问器   relationship - 从相关模型到模型的链接   定义了这种关系。例如,Blog对象b可以访问a   通过Entry属性列出所有相关entry_set个对象:   的 b.entry_set.all()

答案 2 :(得分:2)

您可以像模板中的其他属性一样循环相关成员,因此您可以执行以下操作:

<table>
{% for a in alla %}  
    {% for b in alla.b_set.all %}
         <tr><td>{{a}}</td><td>{{b}}</td></tr>
    {% endfor %}
{% endfor %}
</table>

这只是一个例子。你在模板中做你想做的事情