【问题标题】:django order_by query set, ascending and descendingdjango order_by 查询集,升序和降序
【发布时间】:2012-04-07 17:00:02
【问题描述】:

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

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

我只是想过滤掉所有的 Reserved by check_in 日期。

【问题讨论】:

    标签: python django sorting


    【解决方案1】:

    67

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

    '-'表示降序,升序只给出类属性

    【讨论】:

    • 请为您的问题提供更多背景信息
    • 嗨,欢迎来到 StackOverflow,请检查您的答案,正确格式化,解释(上面的“67”是什么???);你可以参考stackoverflow.com/help/how-to-answer学习如何写一个“好”的答案
    【解决方案2】:

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

    class MyModel(models.Model):
    
        check_in = models.DateField()
    
        class Meta:
            ordering = ('-check_in',)
    

    【讨论】:

      【解决方案3】:
      Reserved.objects.filter(client=client_id).earliest('check_in')
      

      或者

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

      这是earliest()latest() 的文档

      【讨论】:

        【解决方案4】:

        如果由于某种原因你有空值,你可以像这样使用 F 函数:

        from django.db.models import F

        Reserved.objects.all().filter(client=client_id).order_by(F('check_in').desc(nulls_last=True))

        所以它会将空值放在最后。 Django 提供的文档:https://docs.djangoproject.com/en/stable/ref/models/expressions/#using-f-to-sort-null-values

        【讨论】:

          【解决方案5】:

          您也可以使用以下指令:

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

          【讨论】:

          • 你可以,但我强烈怀疑让 SQL 服务器处理订单会更有效,至少在理论上是这样。不过,它很好很清晰。
          【解决方案6】:
          1. 升序

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

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

          -(连字符)在这里表示降序。

          【讨论】:

          • 你可以通过调用过滤器来保存一些查询
          【解决方案7】:

          这对我有用。

          latestsetuplist = SetupTemplate.objects.order_by('-creationTime')[:10][::1]
          

          【讨论】:

            【解决方案8】:
            Reserved.objects.filter(client=client_id).order_by('-check_in')
            

            注意- 之前的check_in

            Django Documentation

            【讨论】:

            • models.somModalName.all().order_b('-date/time')
            • - 在列名前表示降序,- 表示升序。
            • 如果我想通过查询参数订购怎么办?我的意思是如果“order=asc”那么我想按升序排序,如果“order=desc”那么我想按降序排序!除了使用“if/else”之外,还有什么方法可以将 ascdesc 传递给任何参数,然后根据该参数进行排序?
            【解决方案9】:

            升序:

            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]
            

            【讨论】:

            • 为什么有人想要使用第二种方法?
            • 这是可用的选择之一。但是,更好的方法是使用第一种方法。
            • 第二个将返回一个列表,而不是一个查询集。
            • @ruohola 是的,它会返回列表
            【解决方案10】:

            删除.all()

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

            【讨论】:

            • 这与@leonardo-z 的答案基本相同,不是吗?
            【解决方案11】:
            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

            【讨论】:

              猜你喜欢
              • 2019-12-02
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-07-30
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多