Django order_by查询集,升序和降序


286

如何按日期降序对django中的查询集进行排序?

Reserved.objects.all().filter(client=client_id).order_by('check_in')

我只想从所有的check_in日期按降序过滤。

Answers:


549
Reserved.objects.filter(client=client_id).order_by('-check_in')

注意-之前check_in

Django文档


models.somModalName.all()。order_b('-date / time')
Shedrack,

1
-列名之前的意思是降序排列而没有-平均递增。
CallMarl

69
Reserved.objects.filter(client=client_id).order_by('-check_in')

“ check_in”前面的连字符“-”表示降序。隐含升序。

我们不必在filter()之前添加all()。那仍然可以工作,但是只需要从根QuerySet中获取所有对象时就需要添加all()。

此处的更多信息:https : //docs.djangoproject.com/en/dev/topics/db/queries/#retrieving-specific-objects-with-filters


3
比接受的答案干净,没有理由拥有.all()。filter(xxx)。
路加·杜平

19

您还可以使用以下说明:

Reserved.objects.filter(client=client_id).order_by('check_in').reverse()

4
您可以,但是我强烈怀疑,至少从理论上讲,让SQL Server处理订单会更有效。很好,很清楚。
Michael Scheper

1
@MichaelScheper是的,这是肯定的。另外,.all().filter()没有必要。.filter()一个人就可以了。
山姆·克里默

14

对于升序:

Reserved.objects.filter(client=client_id).order_by('check_in')

对于降序:

1.  Reserved.objects.filter(client=client_id).order_by('-check_in')

要么

2.  Reserved.objects.filter(client=client_id).order_by('check_in')[::-1]

1
为什么有人要使用第二种方法?
MichaelR

那是可用的选择之一。但是,更好的方法是使用第一种方法。
anjaneyulubatta505

12

它可以删除.all()

Reserved.objects.filter(client=client_id).order_by('-check_in')

3
这基本上与@ leonardo-z的答案相同,不是吗?
Michael Scheper

7

添加-将以降序排列。您还可以通过向模型的元数据添加默认顺序来进行设置。这意味着当您执行查询时,只需执行MyModel.objects.all(),它将以正确的顺序显示。

class MyModel(models.Model):

    check_in = models.DateField()

    class Meta:
        ordering = ('-check_in',)

3
  1. 升序

    Reserved.objects.all().filter(client=client_id).order_by('check_in')
  2. 降序

    Reserved.objects.all().filter(client=client_id).order_by('-check_in')

- (连字符)用于指示降序。



-1

67

Reserved.objects.filter(client = client_id).order_by('-check_in')

“-”表示降序,对于升序,仅提供类属性


1
请给予更多的上下文您的问题
伊曼

嗨,欢迎使用StackOverflow,请查看您的答案,正确设置格式,并对其进行解释(此“ 67”在顶部是什么???);您可以访问stackoverflow.com/help/how-to-answer来学习如何编写“好”答案
Pierre
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.