ORM排序与模型“元”排序- Django 1.11

3
小问题 - 如何更好地对项目进行排序:
1)
class Table(models.Model):
    ...
    class Meta:
        ordering = ['user']

2) Table.objects.all().order_by("user")

我认为第二种方法更好,因为第一种方法总是会返回排序的查询集,如果有时我们不需要排序,那么它将需要额外的时间。除了“不用每次编写”.order_by(“user”)之外,是否有其他使用第一种方法的原因呢?

2个回答

3
您说得对,如果不需要,使用元数据排序确实会导致额外的时间。额外开销的数量取决于所指定的排序方式。

这在文档中有描述:

https://docs.djangoproject.com/en/1.11/ref/models/options/#ordering

鉴于此,这成为了一个设计选择。如果您始终需要按相同顺序排列模型实例,例如按字母顺序排列出售的产品名称列表,则可能需要使用 Meta Ordering。如果您以各种不同的方式处理模型实例,并需要不同的排序/过滤方式,则可能不希望承担 Meta Ordering 带来的开销。

3

当你在使用类视图中的模型时,有时使用第一种选项非常重要,因为它可能是作为ForeignKey传递的模型。在这种情况下,在模板中引用它时,如果你没有在Meta中添加ordering,则无法设置顺序。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接