在Django中从模板使用ManyToMany额外字段
我会用一个稍微简单一点的例子,来自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对象,然后按人和组进行排序,再把它们传递给你的模板。这样只需要进行一次数据库查询。