2011-12-14 71 views
-1

我将使用来自Djano文档的示例的稍微简化的版本。在Django中使用来自模板的ManyToMany额外字段

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 %} 

但这似乎并不为我工作。我想我无法找到正确的方式来访问它。

+2

要打印什么?如果一个人是3个团体的成员,你期望有`invite_reason`吗?或者全部都是? – DrTyrsa 2011-12-14 12:10:26

+0

对不起,我错过了一个有点重要的部分,我们首先迭代组,然后是人。哎呀。我编辑过这个。 – 2011-12-14 12:31:54

回答

0

你可以尝试以下方法:

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

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

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

相关问题