在 Django ManyToManyField 中排序用户
Ordering Users in a Django ManyToManyField
我有一个具有 ManyToManyField 用户的模型:
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)
模板 (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 %}
...
如何按用户字段的字母顺序对用户集 (excuse.students.all
) 进行排序,例如:user.last_name?
您只需更改 views.py
即可:
queryset = Excuse.objects.all().prefetch_related(
Prefetch('students', queryset=User.objects.order_by('lastname')))
remember to import User model!
您可以在您的 Excuse 模型中创建一个方法,它将return 一个排序的学生集合:
def get_sorted_students(self):
return self.students.all().order_by('last_name')
然后在您的模板中使用 excuse.get_sorted_students
而不是 excuse.students.all
或者,您可以使用自定义模板标签来呈现学生列表。
我有一个具有 ManyToManyField 用户的模型:
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)
模板 (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 %}
...
如何按用户字段的字母顺序对用户集 (excuse.students.all
) 进行排序,例如:user.last_name?
您只需更改 views.py
即可:
queryset = Excuse.objects.all().prefetch_related(
Prefetch('students', queryset=User.objects.order_by('lastname')))
remember to import User model!
您可以在您的 Excuse 模型中创建一个方法,它将return 一个排序的学生集合:
def get_sorted_students(self):
return self.students.all().order_by('last_name')
然后在您的模板中使用 excuse.get_sorted_students
而不是 excuse.students.all
或者,您可以使用自定义模板标签来呈现学生列表。