我有一些相互关联的数据模型(表)。如果一个模型有一个指向另一个模型的相关字段,没问题,我可以在模板中轻松访问,但如何进行具有反向关系的调用呢?
示例:
Company
可以包含任意数量的Location
,每个位置可以包含任意数量的Contact
。
因此Company
表既未提及位置或联系人,但Location
对公司有fk。并且Contact
有一个fk到位置。
在模板中,我想显示符合特定条件的公司。有了它们,我希望它们的位置和位置联系人也可以显示。
我的想法是,也许我首先进行Company
查询,然后为Location
(以及Contact
)制作另一个查询,然后将其注入相同的dict,但这听起来非常令人困惑对我而言,我确定,这是一种常见的模式。
任何提示?
答案 0 :(得分:2)
当您在一个模型上创建ForeignKey
字段时,目标模型会自动获取名为<referring_model>_set
的属性 - 因此在您的示例中,每个Company
实例都有一个location_set
属性,每个Location
都有contact_set
个属性。这些属性实际上引用Manager
实例,类似于Company.objects
,只返回与当前实例相关的对象。
您可以使用这些向后引用来遍历模板中的相关对象,例如:
<ul>
{% for location in company.location_set %}
<li>
<em>{{ location.name }}</em>
<ul>
{% for contact in location.contact_set %}
<li>{{ contact.name }}</li>
{% endfor %}
</ul>
</li>
{% endfor %}
</ul>
您可以详细了解这种向后关系in the Django docs。