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的Django框架中显示对象子集的方法
Jul 21 Python
Python线性回归实战分析
Feb 01 Python
和孩子一起学习python之变量命名规则
May 27 Python
python 按不同维度求和,最值,均值的实例
Jun 28 Python
对python 命令的-u参数详解
Dec 03 Python
python读取txt文件,去掉空格计算每行长度的方法
Dec 20 Python
python 数据生成excel导出(xlwt,wlsxwrite)代码实例
Aug 23 Python
使用PyTorch训练一个图像分类器实例
Jan 08 Python
使用matlab 判断两个矩阵是否相等的实例
May 11 Python
keras绘制acc和loss曲线图实例
Jun 15 Python
浅析python连接数据库的重要事项
Feb 22 Python
python自动化测试之Selenium详解
Mar 13 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 输出简单动态WAP页面
2009/06/09 PHP
php数组函数序列之array_sum() - 计算数组元素值之和
2011/10/29 PHP
ThinkPHP利用PHPMailer实现邮件发送实现代码
2013/09/26 PHP
Symfony数据校验方法实例分析
2015/01/26 PHP
PHP+Mysql无刷新问答评论系统(源码)
2016/12/20 PHP
javascript 浏览器判断 绑定事件 arguments 转换数组 数组遍历
2009/07/06 Javascript
javascript中如何处理引号编码&amp;#034;
2013/08/15 Javascript
详谈LABJS按需动态加载js文件
2015/05/07 Javascript
javascript实现获取服务器时间
2015/05/19 Javascript
js实现新年倒计时效果
2015/12/10 Javascript
在web中js实现类似excel的表格控件
2016/09/01 Javascript
Angularjs 实现分页功能及示例代码
2016/09/14 Javascript
基于js实现二级下拉联动
2016/12/17 Javascript
Vue.js实现一个漂亮、灵活、可复用的提示组件示例
2017/03/17 Javascript
基于nodejs 的多页面爬虫实例代码
2017/05/31 NodeJs
解决微信浏览器缓存站点入口文件(IIS部署Vue项目)
2019/06/17 Javascript
解决vuecli3中img src 的引入问题
2020/08/04 Javascript
解决在Vue中使用axios POST请求变成OPTIONS的问题
2020/08/14 Javascript
Python实现全角半角字符互转的方法
2016/11/28 Python
利用 Monkey 命令操作屏幕快速滑动
2016/12/07 Python
Python数据结构之双向链表的定义与使用方法示例
2018/01/16 Python
python 对dataframe下面的值进行大规模赋值方法
2018/06/09 Python
python实现两个文件夹的同步
2019/08/29 Python
python实现简单图书管理系统
2019/11/22 Python
关于ResNeXt网络的pytorch实现
2020/01/14 Python
Django模板之基本的 for 循环 和 List内容的显示方式
2020/03/31 Python
中外合拍动画首获奥斯卡提名,“上海出品”《飞奔去月球》能否拿下最终大奖?
2021/03/16 国漫
澳大利亚购买太阳镜和眼镜网站:Glamoureyes
2020/09/22 全球购物
人力资源专业推荐信
2013/11/29 职场文书
小学校园活动策划
2014/01/30 职场文书
七年级生物教学反思
2014/01/30 职场文书
租房协议书
2014/04/10 职场文书
领导工作表现评语
2015/01/04 职场文书
2015年基层党组织公开承诺书
2015/01/21 职场文书
自愿离婚协议书范本
2015/01/26 职场文书
java基础——多线程
2021/07/03 Java/Android