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标准库defaultdict模块使用示例
Apr 28 Python
Python yield 使用浅析
May 28 Python
Python实现模拟时钟代码推荐
Nov 08 Python
Python模拟登录验证码(代码简单)
Feb 06 Python
老生常谈Python基础之字符编码
Jun 14 Python
python图书管理系统
Apr 05 Python
Python之循环结构
Jan 15 Python
对Python Pexpect 模块的使用说明详解
Feb 14 Python
Python 实现的 Google 批量翻译功能
Aug 26 Python
Python二次规划和线性规划使用实例
Dec 09 Python
python如何将图片转换素描画
Sep 08 Python
Python虚拟环境virtualenv是如何使用的
Jun 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 SQL防注入代码集合
2008/04/25 PHP
PHP 创建文件(文件夹)以及目录操作代码
2010/03/04 PHP
ThinkPHP中的关联模型注意点
2014/06/16 PHP
学习php设计模式 php实现适配器模式
2015/12/07 PHP
Yii2汉字转拼音类的实例代码
2017/04/18 PHP
JQuery优缺点分析说明
2010/06/09 Javascript
动态创建样式表在各浏览器中的差异测试代码
2011/09/13 Javascript
JS实现的简洁二级导航菜单雏形效果
2015/10/13 Javascript
Laravel中常见的错误与解决方法小结
2016/08/30 Javascript
JavaScript trim 实现去除字符串首尾指定字符的简单方法
2016/12/27 Javascript
详解使用vue-router进行页面切换时滚动条位置与滚动监听事件
2017/03/08 Javascript
MUI 上拉刷新/下拉加载功能实例代码
2017/04/13 Javascript
详解axios在vue中的简单配置与使用
2017/05/10 Javascript
Popup弹出框添加数据实现方法
2017/10/27 Javascript
vue-cli项目中使用公用的提示弹层tips或加载loading组件实例详解
2018/05/28 Javascript
用VsCode编辑TypeScript的实现方法
2020/05/07 Javascript
[41:56]Spirit vs Liquid Supermajor小组赛A组 BO3 第一场 6.2
2018/06/03 DOTA
selenium+python 去除启动的黑色cmd窗口方法
2018/05/22 Python
win7 x64系统中安装Scrapy的方法
2018/11/18 Python
python3实现斐波那契数列(4种方法)
2019/07/15 Python
基于Tensorflow:CPU性能分析
2020/02/10 Python
解决tensorflow 释放图,删除变量问题
2020/06/23 Python
django中cookiecutter的使用教程
2020/12/03 Python
python中Array和DataFrame相互转换的实例讲解
2021/02/03 Python
python中zip()函数遍历多个列表方法
2021/02/18 Python
Python3自带工具2to3.py 转换 Python2.x 代码到Python3的操作
2021/03/03 Python
写一个在SQL Server创建表的SQL语句
2012/03/10 面试题
MYSQL相比于其他数据库有哪些特点
2013/07/19 面试题
工作证明范本(2篇)
2014/09/14 职场文书
2014财务人员自我评价范文
2014/09/21 职场文书
秋冬农业生产标语
2014/10/09 职场文书
2014年施工员工作总结
2014/11/18 职场文书
幼儿园中班班级总结
2015/08/10 职场文书
《莫泊桑拜师》教学反思
2016/02/22 职场文书
matplotlib画混淆矩阵与正确率曲线的实例代码
2021/06/01 Python
GoFrame基于性能测试得知grpool使用场景
2022/06/21 Golang