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使用QQ邮箱发送Email的方法实例
Feb 09 Python
Scrapy抓取京东商品、豆瓣电影及代码分享
Nov 23 Python
利用python如何处理nc数据详解
May 23 Python
浅谈python在提示符下使用open打开文件失败的原因及解决方法
Nov 30 Python
python实现控制COM口的示例
Jul 03 Python
利用Pandas和Numpy按时间戳将数据以Groupby方式分组
Jul 22 Python
python设计tcp数据包协议类的例子
Jul 23 Python
初次部署django+gunicorn+nginx的方法步骤
Sep 11 Python
django实现web接口 python3模拟Post请求方式
Nov 19 Python
python-web根据元素属性进行定位的方法
Dec 13 Python
Python super()函数使用及多重继承
May 06 Python
python保存大型 .mat 数据文件报错超出 IO 限制的操作
May 10 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代码 用PHP写出自己的BLOG系统
2010/04/12 PHP
php mssql扩展SQL查询中文字段名解决方法
2012/10/15 PHP
php创建和删除目录函数介绍和递归删除目录函数分享
2014/11/18 PHP
PHP中static关键字以及与self关键字的区别
2015/07/01 PHP
php把数组值转换成键的方法
2015/07/13 PHP
php similar_text()函数的定义和用法
2016/05/12 PHP
[JS源码]超长文章自动分页(客户端版)
2007/01/09 Javascript
js select常用操作控制代码
2010/03/16 Javascript
js中eval详解
2012/03/30 Javascript
JavaScript 图像动画的小demo
2012/05/23 Javascript
jquery获取一个元素下面相同子元素的个数代码
2014/07/31 Javascript
JavaScript极简入门教程(三):数组
2014/10/25 Javascript
JavaScript Math.round() 方法
2015/12/18 Javascript
安装使用Mongoose配合Node.js操作MongoDB的基础教程
2016/03/01 Javascript
分享一个精简的vue.js 图片lazyload插件实例
2017/03/13 Javascript
原生JS实现瀑布流插件
2018/02/06 Javascript
Vue render深入开发讲解
2018/04/13 Javascript
vue-router 源码之实现一个简单的 vue-router
2018/07/02 Javascript
在vue中使用SockJS实现webSocket通信的过程
2018/08/29 Javascript
js实现动态增加文件域表单功能
2018/10/22 Javascript
详解Vue的watch中的immediate与watch是什么意思
2019/12/30 Javascript
[11:27]《一刀刀一天》之DOTA全时刻20:TI4总奖金突破920W TS赛事分析
2014/06/18 DOTA
[01:36:19]Secret vs NB 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Python基于smtplib实现异步发送邮件服务
2015/05/28 Python
Python3连接MySQL(pymysql)模拟转账实现代码
2016/05/24 Python
Python将文本去空格并保存到txt文件中的实例
2018/07/24 Python
Python网页正文转换语音文件的操作方法
2018/12/09 Python
python创造虚拟环境方法总结
2019/03/04 Python
Antler英国官网:购买安特丽行李箱、拉杆箱
2019/08/25 全球购物
美体小铺波兰官方网站:The Body Shop波兰
2019/09/03 全球购物
Made in Design德国:设计师家具、灯具和装饰
2019/10/31 全球购物
在使用非全零作为空指针内部表达的机器上, NULL是如何定义
2014/11/09 面试题
大学生年度自我鉴定
2013/10/31 职场文书
秋季校运动会广播稿
2014/02/23 职场文书
电影建国大业观后感
2015/06/01 职场文书
小学校长开学致辞
2015/07/29 职场文书