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 相关文章推荐
两个命令把 Vim 打造成 Python IDE的方法
Mar 20 Python
Python的Django框架中forms表单类的使用方法详解
Jun 21 Python
Python数据结构之双向链表的定义与使用方法示例
Jan 16 Python
使用Python通过win32 COM打开Excel并添加Sheet的方法
May 02 Python
Django3.0 异步通信初体验(小结)
Dec 04 Python
python调用HEG工具批量处理MODIS数据的方法及注意事项
Feb 18 Python
Python request操作步骤及代码实例
Apr 13 Python
通俗易懂了解Python装饰器原理
Sep 17 Python
python rsa-oaep加密的示例代码
Sep 23 Python
用OpenCV进行年龄和性别检测的实现示例
Jan 29 Python
Python制作一个随机抽奖小工具的实现
Jul 07 Python
Python实现对齐打印 format函数的用法
Apr 28 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实现验证码功能
2006/10/09 PHP
MVC模式的PHP实现
2006/10/09 PHP
PHP文章采集URL补全函数(FormatUrl)
2012/08/02 PHP
php数组排序usort、uksort与sort函数用法
2014/11/17 PHP
IIS 7.5 asp Session超时时间设置方法
2017/04/17 PHP
javascript add event remove event
2008/04/07 Javascript
刷新页面实现方式总结(HTML,ASP,JS)
2008/11/13 Javascript
firefox和IE系列的相关区别整理 以备后用
2009/12/28 Javascript
使用js简单实现了tree树菜单
2013/11/20 Javascript
js实现登陆遮罩效果的方法
2015/07/28 Javascript
JS获取屏幕高度的简单实现代码
2016/05/24 Javascript
js简单获取表单中单选按钮值的方法
2016/08/23 Javascript
利用jquery实现实时更新歌词的方法
2017/01/06 Javascript
canvas滤镜效果实现代码
2017/02/06 Javascript
JS字符串统计操作示例【遍历,截取,输出,计算】
2017/03/27 Javascript
VUE2.0+Element-UI+Echarts封装的组件实例
2018/03/02 Javascript
node使用promise替代回调函数
2018/05/07 Javascript
element-ui 限制日期选择的方法(datepicker)
2018/05/16 Javascript
小程序实现横向滑动日历效果
2019/10/21 Javascript
[50:24]VGJ.S vs Pain 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
python获得两个数组交集、并集、差集的方法
2015/03/27 Python
Python使用Redis实现作业调度系统(超简单)
2016/03/22 Python
Python编程深度学习绘图库之matplotlib
2018/12/28 Python
对python中字典keys,values,items的使用详解
2019/02/03 Python
python实现五子棋小程序
2019/06/18 Python
Python pickle模块实现对象序列化
2019/11/22 Python
python:动态路由的Flask程序代码
2019/11/22 Python
如何基于Python + requests实现发送HTTP请求
2020/01/13 Python
英国奢侈品网站:MatchesFashion
2016/12/16 全球购物
美国珠宝店:Helzberg Diamonds
2018/10/24 全球购物
加拿大在线隐形眼镜和眼镜店:VisionPros
2019/10/06 全球购物
警察群众路线整改措施
2014/09/26 职场文书
2014年大学团支部工作总结
2014/12/02 职场文书
慰问信范文
2015/02/14 职场文书
网络妈妈观后感
2015/06/08 职场文书
2016年第104个国际护士节活动总结
2016/04/06 职场文书