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重新引入被覆盖的自带function
Jul 16 Python
Python升级提示Tkinter模块找不到的解决方法
Aug 22 Python
python itchat实现微信自动回复的示例代码
Aug 14 Python
python实现内存监控系统
Mar 07 Python
Python操作word常见方法示例【win32com与docx模块】
Jul 17 Python
pandas.DataFrame的pivot()和unstack()实现行转列
Jul 06 Python
Flask使用Pyecharts在单个页面展示多个图表的方法
Aug 05 Python
python线程安全及多进程多线程实现方法详解
Sep 27 Python
python+opencv边缘提取与各函数参数解析
Mar 09 Python
python seaborn heatmap可视化相关性矩阵实例
Jun 03 Python
Pycharm2020.1安装中文语言插件的详细教程(不需要汉化)
Aug 07 Python
Python timeit模块原理及使用方法
Oct 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
第十一节 重载 [11]
2006/10/09 PHP
深入了解php4(2)--重访过去
2006/10/09 PHP
PHP 输出缓冲控制(Output Control)详解
2016/08/25 PHP
PHP7 windows支持
2021/03/09 PHP
js自定义事件代码说明
2011/01/31 Javascript
jquery中页面Ajax方法$.load的功能使用介绍
2014/10/20 Javascript
Javascript中的几种继承方式对比分析
2016/03/22 Javascript
jQuery实现的简单分页示例
2016/06/01 Javascript
JavaScript+HTML5实现的日期比较功能示例
2017/07/12 Javascript
浅谈实现vue2.0响应式的基本思路
2018/02/13 Javascript
使用VUE+iView+.Net Core上传图片的方法示例
2019/01/04 Javascript
element-ui 时间选择器限制范围的实现(随动)
2019/01/09 Javascript
layui弹出框Tab选项卡的示例代码
2019/09/04 Javascript
p5.js实现简单货车运动动画
2019/10/23 Javascript
vue使用原生swiper代码实例
2020/02/05 Javascript
在实例中重学JavaScript事件循环
2020/12/03 Javascript
[07:52]2014DOTA2 TI逗比武士游V社解说背后的故事
2014/07/10 DOTA
在Docker上部署Python的Flask框架的教程
2015/04/08 Python
python生成验证码图片代码分享
2016/01/28 Python
Python类属性的延迟计算
2016/10/22 Python
浅谈对yield的初步理解
2017/05/29 Python
Python调用系统底层API播放wav文件的方法
2017/08/11 Python
Python入门之后再看点什么好?
2018/03/05 Python
Python使用Tkinter实现滚动抽奖器效果
2020/01/06 Python
linux 下selenium chrome使用详解
2020/04/02 Python
django Layui界面点击弹出对话框并请求逻辑生成分页的动态表格实例
2020/05/12 Python
解决Python中导入自己写的类,被划红线,但不影响执行的问题
2020/07/13 Python
CSS3实现渐变背景兼容问题
2020/05/06 HTML / CSS
瑞士网球商店:Tennis-Point
2020/03/12 全球购物
药剂专业学生求职信范文
2013/12/28 职场文书
表扬信格式
2014/01/12 职场文书
我的梦想演讲稿1000字
2014/08/21 职场文书
全国法制宣传日活动总结2014
2014/11/01 职场文书
2015年安全工作总结范文
2015/04/02 职场文书
小学教师读书笔记
2015/07/01 职场文书
导游词之井冈山
2019/11/20 职场文书