在Django中从模板使用ManyToMany额外字段

-1 投票
1 回答
845 浏览
提问于 2025-04-17 08:21

我会用一个稍微简单一点的例子,来自Django的文档。

class Person(models.Model):
    name = models.CharField(max_length=128)

class Group(models.Model):
    name = models.CharField(max_length=128)
    members = models.ManyToManyField(Person, through='Membership')

class MembershipInfo(models.Model):
    person = models.ForeignKey(Person)
    group = models.ForeignKey(Group)
    invite_reason = models.CharField(max_length=64)

我想在模板中遍历,比如说,Group和Person,并从额外的字段中获取一些信息,像这样:

{% for group in group_list %}
    {% for person in group.person.all %}
        {{ person.membership_info.invite_reason }}
    {% endfor %}
{% endfor %}

但是这似乎对我来说不太管用。我想我就是找不到正确的访问方式。

1 个回答

1

你可以试试下面的方法:

{% for person in person_list.all %}
    {% for membership_info in person.members_set.all }}
        {{ membership_info.invite_reason }}
    {% endfor %}
{% endfor %}

这个方法效率不是很高,但这是我能想到的唯一一个只使用模板的选项。

补充说明。还有一个选择是从数据库中选取所有的MembershipInfo对象,然后按人和组进行排序,再把它们传递给你的模板。这样只需要进行一次数据库查询。

撰写回答