按照intermediatry关系指定的顺序循环相关(M2M)项目

时间:2011-08-18 00:22:01

标签: django templates sorting many-to-many

使用文档中的示例: https://docs.djangoproject.com/en/1.2/topics/db/models/#intermediary-manytomany

我可以遍历群组并向每个人展示:

{% for group in group_list %}
 {{ group.name }}:
 {% for member in group.members.all %}
  {{ member.name }}
 {% endfor %}
{% endfor %}

但我无法弄清楚如何按照他们加入的顺序显示成员(即,通过membership.date_joined)。在所有人之后使用dictsort:

{% for member in group.members.all|dictsort:"date_joined" %}

会产生一个空的成员列表。我尝试过使用members.through,但似乎无法从中获取任何数据。

2 个答案:

答案 0 :(得分:0)

您可以指定ordering attribute in the model's Meta - 然后默认情况下会对该模型上的所有查询进行排序。

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

    class Meta:
        ordering = ['date_joined']

答案 1 :(得分:0)

找到了解决方法:

在类Group的模型中,我添加了一个方法

def members_by_date(self):
 return Membership.objects.filter(group = self).order_by('date_joined')

在模板中:

{% for membership in group.members_by_date %}
 {{ membership.person.name }}

我仍然想知道如何在模板中进行动态排序,但是,使用dictsort或其他方式,如果有人有提示。