困惑于基本的多表关系&使用Django访问

时间:2011-10-11 16:54:48

标签: django django-models

我有一些相互关联的数据模型(表)。如果一个模型有一个指向另一个模型的相关字段,没问题,我可以在模板中轻松访问,但如何进行具有反向关系的调用呢?

示例:

Company可以包含任意数量的Location,每个位置可以包含任意数量的Contact

因此Company表既未提及位置或联系人,但Location对公司有fk。并且Contact有一个fk到位置。

在模板中,我想显示符合特定条件的公司。有了它们,我希望它们的位置和位置联系人也可以显示。

我的想法是,也许我首先进行Company查询,然后为Location(以及Contact)制作另一个查询,然后将其注入相同的dict,但这听起来非常令人困惑对我而言,我确定,这是一种常见的模式。

任何提示?

1 个答案:

答案 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