Python 在Django中使用模板中的许多额外字段
我将使用Djano文档中示例的一个稍微简化的版本Python 在Django中使用模板中的许多额外字段,python,django,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 Members
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 %}
但这似乎对我不起作用。我想我就是找不到访问它的正确方法。您可以尝试以下方法:
{% for person in person_list.all %}
{% for membership_info in person.members_set.all }}
{{ membership_info.invite_reason }}
{% endfor %}
{% endfor %}
这不是很有效,但这是我能想到的唯一一个单独使用模板的选项
编辑。另一个选项是从数据库中选择所有MembershipInfo对象,按人员和组对它们进行排序,并将它们传递给模板。这只需要一个数据库查询。要打印什么?如果一个人是3个小组的成员,你希望是哪一个小组?或者全部?抱歉,我遗漏了一个重要的部分,我们先迭代组,然后是人。哎呀。我已经编辑了此内容。为了清楚起见,我需要与该组和艺术家对应的原因。然后,您应该执行MembershipInfo.objects.order_by('group','person')以更改排序顺序:),那么,如果我想按这些内容对它们进行分组,该怎么办?如中所示,为每个组设置一个标题,然后打印该组中的每个艺术家及其原因。不确定这在这里是否有效。有效的方法是
{%regroup%}
MembershipInfo.objects.order\u by('person','group')
byperson