2

我在模板中创建了以下for循环:

    {% for task in item.task_set.all %}
        <li class="task">
            {{ task }}
        </li>
    {% endfor %}

有没有办法订购task_set。它目前按 ID 订购,但我想按任务名称订购。

4

1 回答 1

7

如果您对始终按任务名称排序的任务感到满意,请使用排序选项

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 }}. 如果您确实需要在模板中指定查询集的顺序,则需要编写自定义模板过滤器

于 2013-05-21T22:27:46.770 回答