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字符串编码识别模块chardet简单应用
Jun 15 Python
Python可变参数函数用法实例
Jul 07 Python
python递归删除指定目录及其所有内容的方法
Jan 13 Python
Python实现自动为照片添加日期并分类的方法
Sep 30 Python
在IPython中进行Python程序执行时间的测量方法
Nov 01 Python
Python实战购物车项目的实现参考
Feb 20 Python
Python 计算任意两向量之间的夹角方法
Jul 05 Python
Python在cmd上打印彩色文字实现过程详解
Aug 07 Python
python实现对列表中的元素进行倒序打印
Nov 23 Python
学点简单的Django之第一个Django程序的实现
Feb 24 Python
python opencv人脸识别考勤系统的完整源码
Apr 26 Python
使用Python获取字典键对应值的方法
Apr 26 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 中的4种标记风格介绍
2012/05/10 PHP
destoon实现资讯信息前面调用它所属分类的方法
2014/07/15 PHP
PHP扩展框架之Yaf框架的安装与使用
2016/05/18 PHP
Laravel实现批量更新多条数据
2020/04/06 PHP
PHP时间类完整代码实例
2021/02/26 PHP
jQuery中append、insertBefore、after与insertAfter的简单用法与注意事项
2020/04/04 Javascript
jquery插件制作教程 txtHover
2012/08/17 Javascript
js每隔5分钟执行一次ajax请求的实现方法
2013/11/27 Javascript
js实现将选中值累加到文本框的方法
2015/08/12 Javascript
javascript中arguments,callee,caller详解
2016/03/16 Javascript
Jquery $when done then的用法详解
2016/05/20 Javascript
jquery radio的取值_radio的选中_radio的重置方法
2016/09/20 Javascript
基于jQuery实现左侧菜单栏可折叠功能
2016/12/27 Javascript
js学习心得_一个简单的动画库封装tween.js
2017/07/14 Javascript
浅谈react前后端同构渲染
2017/09/20 Javascript
Vue源码解析之Template转化为AST的实现方法
2018/12/14 Javascript
vue中利用Promise封装jsonp并调取数据
2019/06/18 Javascript
Node.js API详解之 tty功能与用法实例分析
2020/04/27 Javascript
python 中的列表解析和生成表达式
2011/03/10 Python
深入浅析Python字符编码
2015/11/12 Python
解决python明明pip安装成功却找不到包的问题
2019/08/28 Python
Python实现自动签到脚本的示例代码
2020/08/19 Python
Python用dilb提取照片上人脸的示例
2020/10/26 Python
利用python绘制正态分布曲线
2021/01/04 Python
python 对xml解析的示例
2021/02/27 Python
阿迪达斯丹麦官网:adidas丹麦
2016/10/01 全球购物
美国专营婴幼儿用品的购物网站:buybuy BABY
2017/01/01 全球购物
一套C++笔试题面试题
2012/06/06 面试题
人力资源求职信
2014/05/25 职场文书
公司经理任命书
2014/06/05 职场文书
2014银行领导班子四风对照检查材料思想汇报
2014/09/25 职场文书
2014年药剂科工作总结
2014/11/26 职场文书
歌咏比赛主持词
2015/06/29 职场文书
证婚人婚礼致辞
2015/07/28 职场文书
pandas 操作 Excel操作总结
2021/03/31 Python
粗暴解决CUDA out of memory的问题
2021/05/22 Python