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的Scrapy框架编写web爬虫的简单示例
Apr 17 Python
python字典get()方法用法分析
Apr 17 Python
python写一个md5解密器示例
Feb 23 Python
Python使用Selenium+BeautifulSoup爬取淘宝搜索页
Feb 24 Python
python实现websocket的客户端压力测试
Jun 25 Python
python利用wx实现界面按钮和按钮监听和字体改变的方法
Jul 17 Python
Django认证系统实现的web页面实现代码
Aug 12 Python
Python 3.6打包成EXE可执行程序的实现
Oct 18 Python
python 将dicom图片转换成jpg图片的实例
Jan 13 Python
Python字典dict常用方法函数实例
Nov 09 Python
Selenium执行完毕未关闭chromedriver/geckodriver进程的解决办法(java版+python版)
Dec 07 Python
python字典与json转换的方法总结
Dec 28 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
PHP的一个完整SMTP类(解决邮件服务器需要验证时的问题)
2006/10/09 PHP
PHPwind整合最土系统用户同步登录实现方法
2010/12/08 PHP
PHP基础学习之流程控制的实现分析
2013/04/28 PHP
解析Linux下Varnish缓存的配置优化
2013/06/20 PHP
php strnatcmp()函数的用法总结
2013/11/27 PHP
php中unserialize返回false的解决方法
2014/09/22 PHP
php使用ffmpeg获取视频信息并截图的实现方法
2016/05/03 PHP
php中array_slice和array_splice函数解析
2016/10/18 PHP
php json相关函数用法示例
2017/03/28 PHP
为jquery.ui.dialog 增加“自动记住关闭时的位置”的功能
2009/11/24 Javascript
仅IE不支持setTimeout/setInterval函数的第三个以上参数
2011/05/25 Javascript
jQuery异步获取json数据方法汇总
2014/12/22 Javascript
JS动态显示表格上下frame的方法
2015/03/31 Javascript
jQuery打字效果实现方法(附demo源码下载)
2015/12/18 Javascript
EasyUI闪屏EasyUI页面加载提示(原理+代码+效果图)
2016/02/21 Javascript
vue.js之vue-cli脚手架的搭建详解
2017/05/05 Javascript
浅谈pc端rem字体设置的问题
2017/08/03 Javascript
使用JavaScript实现在页面中显示距离2017年中秋节的天数
2017/09/26 Javascript
vue和webpack安装命令详解
2018/06/15 Javascript
Bootstrap-table自定义可编辑每页显示记录数
2018/09/07 Javascript
初试vue-cli使用HBuilderx打包app的坑
2019/07/17 Javascript
JavaScript实现京东快递单号查询
2020/11/30 Javascript
[01:04:32]DOTA2-DPC中国联赛 正赛 Aster vs LBZS BO3 第二场 2月23日
2021/03/11 DOTA
Python中用altzone()方法处理时区的教程
2015/05/22 Python
Python中__slots__属性介绍与基本使用方法
2018/09/05 Python
python使用smtplib模块发送邮件
2020/12/17 Python
优秀教师获奖感言
2014/01/31 职场文书
一分钟演讲稿
2014/04/30 职场文书
关于青春的演讲稿800字
2014/08/22 职场文书
幼儿园国庆节活动总结
2015/03/23 职场文书
大学推普周活动总结
2015/05/07 职场文书
高中班主任心得体会
2016/01/07 职场文书
2016年村党支部公开承诺书
2016/03/24 职场文书
入党转正申请书范文
2019/05/20 职场文书
python周期任务调度工具Schedule使用详解
2021/11/23 Python
Tomcat配置访问日志和线程数
2022/05/06 Servers