Django order_by查询集,升序和降序

481

在Django中,如何按日期降序排序查询集?

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

我只想按照check_in日期从大到小筛选所有保留的项。

14个回答

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

注意在check_in之前的-在列名之前的-表示“降序”,而没有-表示“升序”。

Django文档


1
models.somModalName.all().order_b('-date/time') - Shedrack
19
在列名前加上“-”表示降序排列,没有“-”则表示升序排列。 - CallMarl
1
如果我想按查询参数排序怎么办?我的意思是,如果“order=asc”,那么我想按升序排序,如果“order=desc”,那么按降序排序!有没有不使用“if/else”的方法来传递ascdesc到任何参数中,然后根据它进行排序? - Shahriar Rahman Zahin

89

45

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

class MyModel(models.Model):

    check_in = models.DateField()

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

31

你也可以使用以下指令:

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

10
可以这样做,但我强烈怀疑让SQL服务器处理排序会更加高效,至少在理论上是这样的。尽管如此,这段话表述清晰明了。 - Michael Scheper

20

升序排列:

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
4
第二个将返回一个列表,而不是一个查询集。 - ruohola
@ruohola 是的,它会返回列表。 - anjaneyulubatta505

15

删除 .all() 同样可以达到效果:

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

4
这与@leonardo-z的回答基本相同,不是吗? - Michael Scheper

9
  1. Ascending order

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

    Reserved.objects.all().filter(client=client_id).order_by('-check_in')
    
在这里,“-”(连字符)用于表示降序。

你可以通过调用过滤器来节省一些查询。 - martin

8

67

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

“-”表示降序排列,而升序排列只需添加class属性。

1
请提供更多关于您问题的上下文。 - iman
你好,欢迎来到StackOverflow,请检查您的答案,正确格式化并解释它(顶部的“67”是什么?);您可以参考https://stackoverflow.com/help/how-to-answer来学习如何编写一个“好”的答案。 - Pierre

8

7

这很容易和简单,只需按照以下说明操作。

----- 这表示降序排列

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

------ 此为升序排列

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

如果您想按降序选择,只需在属性字段之前添加减号运算符;如果您想按升序选择,则不需要减号运算符。


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