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函数式编程指南(四):生成器详解
Jun 24 Python
Python简单定义与使用二叉树示例
May 11 Python
pytorch 转换矩阵的维数位置方法
Dec 08 Python
Python爬虫文件下载图文教程
Dec 23 Python
Python中的十大图像处理工具(小结)
Jun 10 Python
pandas计算最大连续间隔的方法
Jul 04 Python
python 队列基本定义与使用方法【初始化、赋值、判断等】
Oct 24 Python
使用python实现画AR模型时序图
Nov 20 Python
django模板获取list中指定索引的值方式
May 14 Python
使用pandas实现筛选出指定列值所对应的行
Dec 13 Python
Python 实现一个简单的web服务器
Jan 03 Python
Python中的turtle画箭头,矩形,五角星
Mar 16 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截断标题且兼容utf8和gb2312编码
2013/09/22 PHP
php 批量替换html标签的实例代码
2013/11/26 PHP
php实现zip文件解压操作
2015/11/03 PHP
PHP5.5迭代生成器用法实例详解
2016/03/16 PHP
php面向对象编程self和static的区别
2016/05/08 PHP
Laravel学习基础之migrate的使用教程
2017/10/11 PHP
PHP空值检测函数与方法汇总
2017/11/19 PHP
判断iframe是否加载完成的完美方法
2010/01/07 Javascript
一个JQuery写的点击上下滚动的小例子
2011/08/27 Javascript
JavaScript对象和字串之间的转换实例探讨
2013/04/21 Javascript
jquery五角星评分插件示例分享
2014/02/21 Javascript
Javascript加载速度慢的解决方案
2014/03/11 Javascript
javascript闭包的理解
2015/04/01 Javascript
javascript插件开发的一些感想和心得
2016/02/28 Javascript
Angular的MVC和作用域
2016/12/26 Javascript
JS FormData上传文件的设置方法
2017/07/05 Javascript
js实现移动端轮播图效果
2020/12/09 Javascript
基于jQuery实现的设置文本区域的光标位置
2018/06/15 jQuery
vue 中的keep-alive实例代码
2018/07/20 Javascript
jQuery实现鼠标移入移出事件切换功能示例
2018/09/06 jQuery
JS自定义对象创建与简单使用方法示例
2020/01/15 Javascript
Paypal支付不完全指北
2020/06/04 Javascript
Vue路由切换页面不更新问题解决方案
2020/07/10 Javascript
Webpack的Loader和Plugin的区别
2020/11/09 Javascript
[03:46]显微镜下的DOTA2第七期——满血与残血
2014/06/20 DOTA
python3.6 如何将list存入txt后再读出list的方法
2019/07/02 Python
Numpy的简单用法小结
2019/08/28 Python
Python 调用有道翻译接口实现翻译
2020/03/02 Python
jupyter 中文乱码设置编码格式 避免控制台输出的解决
2020/04/20 Python
Pytorch框架实现mnist手写库识别(与tensorflow对比)
2020/07/20 Python
Schutz鞋官方网站:Schutz Shoes
2017/12/13 全球购物
企业管理专业个人求职信范文
2013/09/24 职场文书
影视艺术学院毕业生自荐信
2013/11/13 职场文书
村党支部书记承诺书
2014/05/29 职场文书
聊聊JS ES6中的解构
2021/04/29 Javascript
vue实现列表垂直无缝滚动
2022/04/08 Vue.js