Циклы по связанным (M2M) элементам в порядке, указанном посредническими отношениями - PullRequest
0 голосов
/ 18 августа 2011

Используя пример из документов: 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 %}

Но я не могу понять, как показать участников в том порядке, в котором они присоединились (то есть, по названию members.date_joined). Использование dictsort после всего так:

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

приводит к пустому списку участников. И я попытался использовать members.through, но, похоже, не могу получить никаких данных от этого.

Ответы [ 2 ]

0 голосов
/ 18 августа 2011

Нашли обходной путь:

В модель для класса 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 или иным образом, если у кого-то есть подсказка для этого.

0 голосов
/ 18 августа 2011

Вы можете указать атрибут ordering в модели 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']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...