Django中怎么对数据查询结果进行排序

在这里插入图片描述
在你的 Django 应用中,你或许希望根据某字段的值对检索结果排序,比如说,按字母顺序。

那么,使用 order_by() 这个方法就可以搞定了。

>>> Publisher.objects.order_by("name")

[<publisher: apress="">, <publisher: o'reilly="">]
      
</publisher:></publisher:>

跟以前的 all() 例子差不多,SQL语句里多了指定排序的部分:

SELECT id, name, address, city, state_province, country, website

FROM books_publisher

ORDER BY name;

我们可以对任意字段进行排序:

>>> Publisher.objects.order_by("address")

[<publisher: o'reilly="">, <publisher: apress="">]
         
>>> Publisher.objects.order_by("state_province")

[<publisher: apress="">, <publisher: o'reilly="">]
          
</publisher:></publisher:></publisher:></publisher:>

如果需要以多个字段为标准进行排序(第二个字段会在第一个字段的值相同的情况下被使用到),使用多个参数就可以了,如下:

>>> Publisher.objects.order_by("state_province", "address")

 [<publisher: apress="">, <publisher: o'reilly="">]

</publisher:></publisher:>

我们还可以指定逆向排序,在前面加一个减号 - 前缀:

>>> Publisher.objects.order_by("-name")

[<publisher: o'reilly="">, <publisher: apress="">]
          
</publisher:></publisher:>

尽管很灵活,但是每次都要用 order_by() 显得有点啰嗦。 大多数时间你通常只会对某些 字段进行排序。 在这种情况下,Django让你可以指定模型的缺省排序方式:

class Publisher(models.Model):

  name = models.CharField(max_length=30)

  address = models.CharField(max_length=50)

  city = models.CharField(max_length=60)

  state_province = models.CharField(max_length=30)

  country = models.CharField(max_length=50)

  website = models.URLField()  
  

  def __unicode__(self):

    return self.name
      

  **class Meta:**

    **ordering = ['name']**

现在,让我们来接触一个新的概念。 class Meta,内嵌于 Publisher 这个类的定义中(如果 class Publisher 是顶格的,那么 class Meta 在它之下要缩进4个空格--按 Python 的传统 )。你可以在任意一个 模型 类中使用 Meta 类,来设置一些与特定模型相关的选项。 在 附录B 中有 Meta 中所有可选项的完整参考,现在,我们关注 ordering 这个选项就够了。 如果你设置了这个选项,那么除非你检索时特意额外地使用了 order_by(),否则,当你使用 Django 的数据库 API 去检索时,Publisher对象的相关返回值默认地都会按 name 字段排序。

本文转自:https://www.py.cn/kuangjia/django/10365.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值