我有以下由外键相关的名为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类。
答案 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 %}
答案 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>
这只是一个例子。你在模板中做你想做的事情