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里大整数相乘相关技巧指南
Sep 12 Python
python将MongoDB里的ObjectId转换为时间戳的方法
Mar 13 Python
深入讨论Python函数的参数的默认值所引发的问题的原因
Mar 30 Python
Python的Django框架中自定义模版标签的示例
Jul 20 Python
python3使用pyqt5制作一个超简单浏览器的实例
Oct 19 Python
python 读写excel文件操作示例【附源码下载】
Jun 19 Python
Python之pymysql的使用小结
Jul 01 Python
python爬虫神器Pyppeteer入门及使用
Jul 13 Python
python 3.74 运行import numpy as np 报错lib\site-packages\numpy\__init__.py
Oct 06 Python
Python中三维坐标空间绘制的实现
Sep 22 Python
python修改微信和支付宝步数的示例代码
Oct 12 Python
一篇文章教你用python画动态爱心表白
Nov 22 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中函数内引用全局变量的方法
2008/10/20 PHP
php调用mysql数据 dbclass类
2011/05/07 PHP
PHP Smarty模版简单使用方法
2016/03/30 PHP
Laravel框架实现修改登录和注册接口数据返回格式的方法
2018/08/17 PHP
解决laravel5.4下的group by报错的问题
2019/10/16 PHP
显示、隐藏密码
2006/07/01 Javascript
图片Slider 带左右按钮的js示例
2013/08/30 Javascript
JavaScript中的逻辑判断符&amp;&amp;、||与!介绍
2014/12/31 Javascript
JavaScript中的方法重载实例
2015/03/16 Javascript
JS+CSS实现的竖向简洁折叠菜单效果代码
2015/10/22 Javascript
jQuery禁用键盘后退屏蔽F5刷新及禁用右键单击
2016/01/22 Javascript
jQuery滚动新闻实现代码
2016/06/26 Javascript
微信小程序 progress组件详解及实例代码
2016/10/25 Javascript
Node.js如何响应Ajax的POST请求并且保存为JSON文件详解
2017/03/10 Javascript
React如何避免重渲染
2018/04/10 Javascript
小程序视频列表中视频的播放与停止的示例代码
2018/07/20 Javascript
js实现小星星游戏
2020/03/23 Javascript
[19:59]2014DOTA2国际邀请赛 IG战队纪录片
2014/08/07 DOTA
python编码最佳实践之总结
2016/02/14 Python
Python 高级专用类方法的实例详解
2017/09/11 Python
Windows下python3.6.4安装教程
2018/07/31 Python
基于python操作ES实例详解
2019/11/16 Python
Python实现栈的方法详解【基于数组和单链表两种方法】
2020/02/22 Python
Python Tkinter Entry和Text的添加与使用详解
2020/03/04 Python
基于Python的Jenkins的二次开发操作
2020/05/12 Python
Python实现小黑屋游戏的完整实例
2021/01/06 Python
python 模块导入问题汇总
2021/02/01 Python
Canvas图片分割效果的实现
2019/07/29 HTML / CSS
简约控的天堂:The Undone
2016/12/21 全球购物
环境工程求职简历的自我评价范文
2013/10/24 职场文书
肯尼迪就职演说稿
2013/12/31 职场文书
医院科室评语
2015/01/04 职场文书
食品仓管员岗位职责
2015/04/01 职场文书
幼儿教师三分钟演讲稿
2019/06/21 职场文书
小学生一年级(书信作文)
2019/08/13 职场文书
Nginx代理Redis哨兵主从配置的实现
2022/07/15 Servers