Django中对数据查询结果进行排序的方法

作者:goldensun 时间:2021-01-31 23:40:18 

在你的 Django 应用中,你或许希望根据某字段的值对检索结果排序,比如说,按字母顺序。 那么,使用 order_by() 这个方法就可以搞定了。


>>> Publisher.objects.order_by("name")
[<Publisher: Apress>, <Publisher: O'Reilly>]

跟以前的 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.objects.order_by("state_province", "address")
[<Publisher: Apress>, <Publisher: O'Reilly>]

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


>>> Publisher.objects.order_by("-name")
[<Publisher: O'Reilly>, <Publisher: Apress>]

尽管很灵活,但是每次都要用 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 字段排序。

标签:Django,数据查询
0
投稿

猜你喜欢

  • python 字典操作提取key,value的方法

    2021-06-01 04:40:39
  • python实现最速下降法

    2023-08-10 18:19:51
  • 解决Python 命令行执行脚本时,提示导入的包找不到的问题

    2022-05-22 23:58:29
  • WEB2.0网页制作标准教程(3)定义语言编码

    2007-11-13 13:23:00
  • nodejs微信公众号支付开发

    2024-05-11 09:17:11
  • Python最大连续区间和动态规划

    2023-02-13 09:40:32
  • Python利用heapq实现一个优先级队列的方法

    2021-08-05 06:28:48
  • 利用Vscode进行Python开发环境配置的步骤

    2023-04-18 09:06:46
  • PyCharm如何导入python项目的方法

    2022-10-23 05:50:35
  • Django 实现xadmin后台菜单改为中文

    2021-12-28 10:31:49
  • Vue新一代状态管理工具Pinia的具体使用

    2024-05-09 15:11:53
  • pandas取出重复数据的方法

    2021-03-23 09:12:52
  • javascript 操作符(~、&、|、^、<<、>>)使用案例

    2024-02-25 18:15:41
  • 文字解说Golang Goroutine和线程的区别

    2023-10-15 18:56:36
  • Python连接数据库使用matplotlib画柱形图

    2024-01-21 19:02:49
  • Python绘制3D立体花朵示例详解

    2021-06-26 02:59:54
  • MySql InnoDB存储引擎之Buffer Pool运行原理讲解

    2024-01-27 01:46:50
  • python合并同类型excel表格的方法

    2022-05-08 03:51:52
  • 用python发送微信消息

    2022-04-14 07:16:55
  • 微信小程序使用navigator实现页面跳转功能

    2024-04-25 10:36:14
  • asp之家 网络编程 m.aspxhome.com