我在模板中创建了以下for
循环:
{% for task in item.task_set.all %}
<li class="task">
{{ task }}
</li>
{% endfor %}
有没有办法订购task_set。它目前按ID排序,但我想按任务名称订购。
答案 0 :(得分:7)
如果您对任务始终按任务名称排序感到高兴,请使用ordering选项
class Task(models.Model):
name = models.CharField(max_length=50)
class Meta:
ordering = ['name']
如果您想要与模型的默认排序不同的顺序,您可以在视图中设置任务的顺序,然后在模板中迭代tasks
。
# view
tasks = item.task_set.order_by('name')
# template
{% for task in tasks %}
无法更改模板中的排序,因为您无法将参数传递给{{ item.task_set.order_by }}
。如果您确实需要在模板中指定查询集的顺序,则需要编写custom template filter。