Search code examples
pythondjangosortingmanytomanyfield

Ordering Users in a Django ManyToManyField


I have a model that has a ManyToManyField of Users:

models.py

class Excuse(models.Model):
    students = models.ManyToManyField(User)
    reason = models.CharField(max_length=50)

views.py

def excuse_list(request, block_id=None):
    queryset = Excuse.objects.all().prefetch_related('students')
    context = {
        "object_list": queryset,
    }
    return render(request, "excuses/excuse_list.html", context)

Template (excuse_list.html)

...
{% for excuse in object_list %}
    <tr>
      <td>{{ excuse.reason }}</td>
      <td>
        {% for student in excuse.students.all %}
          {{student.get_full_name}};
        {% endfor %}
      </td>
    </tr>
{% endfor %}
...

How can I sort the User set (excuse.students.all) alphabetically by a User field, for example: user.last_name?


Solution

  • you can do this just changing your views.py with this:

    queryset = Excuse.objects.all().prefetch_related(
    Prefetch('students', queryset=User.objects.order_by('lastname')))
    

    remember to import User model!