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压缩和解压缩zip文件
Feb 14 Python
Python获取文件所在目录和文件名的方法
Jan 12 Python
python实践项目之监控当前联网状态详情
May 23 Python
Python机器学习算法库scikit-learn学习之决策树实现方法详解
Jul 04 Python
python和c语言的主要区别总结
Jul 07 Python
django 使用 PIL 压缩图片的例子
Aug 16 Python
Django和Flask框架优缺点对比
Oct 24 Python
Django xadmin开启搜索功能的实现
Nov 15 Python
浅析python 定时拆分备份 nginx 日志的方法
Apr 27 Python
利用Python pandas对Excel进行合并的方法示例
Nov 04 Python
Django rest framework如何自定义用户表
Jun 09 Python
python脚本框架webpy模板控制结构
Nov 20 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 Post获取不到非表单数据的问题解决办法
2018/02/27 PHP
Nigma vs AM BO3 第一场2.13
2021/03/10 DOTA
prototype 源码中文说明之 prototype.js
2006/09/22 Javascript
超级退弹代码
2008/07/07 Javascript
元素的内联事件处理函数的特殊作用域在各浏览器中存在差异
2011/01/12 Javascript
jQuery AJAX实现调用页面后台方法和web服务定义的方法分享
2012/03/01 Javascript
JavaScript字符串对象substr方法入门实例(用于截取字符串)
2014/10/16 Javascript
分享一则JavaScript滚动条插件源码
2015/03/03 Javascript
javascript模拟C#格式化字符串
2015/08/26 Javascript
jQuery解析Json实例详解
2015/11/24 Javascript
关于cookie的初识和运用(js和jq)
2016/04/07 Javascript
Vue.js计算属性computed与watch(5)
2016/12/09 Javascript
详解AngularJS中$filter过滤器使用(自定义过滤器)
2017/02/04 Javascript
JavaScript实现跟随滚动缓冲运动广告框
2017/07/15 Javascript
js原生日历的实例(推荐)
2017/10/31 Javascript
webpack4与babel配合使es6代码可运行于低版本浏览器的方法
2018/10/12 Javascript
JavaScript实现轮播图效果代码实例
2019/09/28 Javascript
在Vue mounted方法中使用data变量详解
2019/11/05 Javascript
写给新手同学的vuex快速上手指北小结
2020/04/14 Javascript
解决Vue的文本编辑器 vue-quill-editor 小图标样式排布错乱问题
2020/08/03 Javascript
video.js添加自定义组件的方法
2020/12/09 Javascript
[46:47]2014 DOTA2国际邀请赛中国区预选赛5.21 LGD-CDEC VS NE
2014/05/22 DOTA
Python中文件遍历的两种方法
2014/06/16 Python
python实现搜索本地文件信息写入文件的方法
2016/02/22 Python
Python解析json之ValueError: Expecting property name enclosed in double quotes: line 1 column 2(char 1)
2017/07/06 Python
详解如何使用Python编写vim插件
2017/11/28 Python
python操作微信自动发消息的实现(微信聊天机器人)
2020/07/14 Python
python语音识别指南终极版(有这一篇足矣)
2020/09/09 Python
PyQt5中QSpinBox计数器的实现
2021/01/18 Python
HTML5 localStorage使用总结
2017/02/22 HTML / CSS
社区十八大感言
2014/01/19 职场文书
企业内控岗位的职责
2014/02/07 职场文书
廉洁自律承诺书
2014/03/27 职场文书
幸福家庭标语
2014/06/27 职场文书
“四风”问题整改措施和努力方向
2014/09/20 职场文书
Nginx利用Logrotate实现日志分割
2022/05/20 Servers