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


Posted in Python onJuly 17, 2015

在你的 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 字段排序。

Python 相关文章推荐
python基础教程之popen函数操作其它程序的输入和输出示例
Feb 10 Python
在服务器端实现无间断部署Python应用的教程
Apr 16 Python
在Mac OS上使用mod_wsgi连接Python与Apache服务器
Dec 24 Python
python利用正则表达式提取字符串
Dec 08 Python
你所不知道的Python奇技淫巧13招【实用】
Dec 14 Python
异步任务队列Celery在Django中的使用方法
Jun 07 Python
python快排算法详解
Mar 04 Python
python pyinstaller打包exe报错的解决方法
Nov 02 Python
PyCharm下载和安装详细步骤
Dec 17 Python
对Keras中predict()方法和predict_classes()方法的区别说明
Jun 09 Python
Python数据可视化图实现过程详解
Jun 12 Python
python爬不同图片分别保存在不同文件夹中的实现
Apr 02 Python
在Python的Django框架中获取单个对象数据的简单方法
Jul 17 #Python
Python的Django框架中的数据过滤功能
Jul 17 #Python
在Python的Django框架中更新数据库数据的方法
Jul 17 #Python
在Django框架中运行Python应用全攻略
Jul 17 #Python
Python的Django框架中的数据库配置指南
Jul 17 #Python
浅谈python中截取字符函数strip,lstrip,rstrip
Jul 17 #Python
在Django的视图中使用数据库查询的方法
Jul 16 #Python
You might like
农民和部队如何穿矿
2020/03/04 星际争霸
[EPIC] Larva vs Flash ZvT @ Crossing Field [2017-10-09]
2020/03/17 星际争霸
[原创]php逐行读取txt文件写入数组的方法
2015/07/02 PHP
php版微信公众平台接口参数调试实现判断用户行为的方法
2016/09/23 PHP
ThinkPHP的SAE开发相关注意事项详解
2016/10/09 PHP
php上传excel表格并获取数据
2017/04/27 PHP
ThinkPHP框架实现的MySQL数据库备份功能示例
2018/05/24 PHP
js常用函数 不错
2006/09/08 Javascript
Ext.FormPanel 提交和 Ext.Ajax.request 异步提交函数的区别
2009/11/12 Javascript
20个非常棒的Jquery实用工具 国外文章
2010/01/01 Javascript
js压缩工具 yuicompressor 使用教程
2010/03/31 Javascript
Extjs gridpanel 出现横向滚动条问题的解决方法
2011/07/04 Javascript
单击复制文字兼容各浏览器的完美解决方案
2013/07/04 Javascript
使用jquery hover事件实现表格的隔行换色功能示例
2013/09/03 Javascript
ie8本地图片上传预览示例代码
2014/01/12 Javascript
在React框架中实现一些AngularJS中ng指令的例子
2016/03/06 Javascript
JS动态添加元素及绑定事件造成程序重复执行解决
2017/12/07 Javascript
解决vue热替换失效的根本原因
2018/09/19 Javascript
使用vue完成微信公众号网页小记(推荐)
2019/04/28 Javascript
微信小程序实现动态列表项的顺序加载动画
2019/07/25 Javascript
[43:24]完美世界DOTA2联赛PWL S3 INK ICE vs DLG 第二场 12.12
2020/12/17 DOTA
Python新手实现2048小游戏
2015/03/31 Python
低版本中Python除法运算小技巧
2015/04/05 Python
python中利用Future对象回调别的函数示例代码
2017/09/07 Python
用tensorflow构建线性回归模型的示例代码
2018/03/05 Python
python获取文件真实链接的方法,针对于302返回码
2018/05/14 Python
itchat-python搭建微信机器人(附示例)
2019/06/11 Python
softmax及python实现过程解析
2019/09/30 Python
python实现布隆过滤器及原理解析
2019/12/08 Python
HTML5新增加的功能详解
2016/09/05 HTML / CSS
教你怎样写好自我评价
2013/10/05 职场文书
保送生自荐信范文
2013/10/06 职场文书
建筑专业毕业生求职信
2014/09/30 职场文书
2015年艾滋病宣传活动总结
2015/03/27 职场文书
PostgreSQL基于pgrouting的路径规划处理方法
2022/04/18 PostgreSQL
springboot读取resources下文件的方式详解
2022/06/21 Java/Android