Python >> Tutoriel Python >  >> Python

Tri des éléments associés dans un modèle Django

Vous pouvez utiliser le filtre de modèle dictsort https://docs.djangoproject.com/en/dev/ref/templates/builtins/#std:templatefilter-dictsort

Cela devrait fonctionner :

{% for event in eventsCollection %}
   {{ event.location }}
   {% for attendee in event.attendee_set.all|dictsort:"last_name" %}
     {{ attendee.first_name }} {{ attendee.last_name }}
   {% endfor %}
 {% endfor %}

Vous devez spécifier la commande dans le modèle de participant, comme ceci. Par exemple (en supposant que votre classe modèle s'appelle Attendee) :

class Attendee(models.Model):
    class Meta:
        ordering = ['last_name']

Consultez le manuel pour plus de références.

MODIFIER . Une autre solution consiste à ajouter une propriété à votre modèle d'événement, accessible depuis votre modèle :

class Event(models.Model):
# ...
@property
def sorted_attendee_set(self):
    return self.attendee_set.order_by('last_name')

Vous pouvez en définir d'autres selon vos besoins...


Une solution consiste à créer un templatetag personnalisé :

@register.filter
def order_by(queryset, args):
    args = [x.strip() for x in args.split(',')]
    return queryset.order_by(*args)

utiliser comme ceci :

{% for image in instance.folder.files|order_by:"original_filename" %}
   ...
{% endfor %}