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

时间:2011-12-14 12:04:38

标签: python django

我将使用Djano文档中的示例的略微简化版本。

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)

所以我想要做的是遍历模板中的说,组和人,并从额外的字段中获取一些信息,如下所示:

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

但这似乎对我不起作用。我想我找不到正确的方法来访问它。

1 个答案:

答案 0 :(得分:0)

您可以尝试以下操作:

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

它不是很有效,但它是我能想到的仅使用模板的唯一选择。

修改即可。另一种选择是从数据库中选择所有MembershipInfo对象,按人员和组对它们进行排序,并将它们传递给模板。这只需要一个数据库查询。