在你的 Django 应用中,你或许希望根据某字段的值对检索结果排序,比如说,按字母顺序。 那么,使用 order_by() 这个方法就可以搞定了。

1
2
>>> Publisher.objects.order_by("name")
[<Publisher: Apress>, <Publisher: O'Reilly>]

跟以前的 all() 例子差不多,SQL语句里多了指定排序的部分:

1
2
3
SELECT id, name, address, city, state_province, country, website
FROM books_publisher
ORDER BY name;

我们可以对任意字段进行排序:

1
2
3
4
5
>>> Publisher.objects.order_by("address")
[<Publisher: O'Reilly>, <Publisher: Apress>]
 
>>> Publisher.objects.order_by("state_province")
[<Publisher: Apress>, <Publisher: O'Reilly>]

如果需要以多个字段为标准进行排序(第二个字段会在第一个字段的值相同的情况下被使用到),使用多个参数就可以了,如下:

1
2
>>> Publisher.objects.order_by("state_province", "address")
 [<Publisher: Apress>, <Publisher: O'Reilly>]

我们还可以指定逆向排序,在前面加一个减号 - 前缀:

1
2
>>> Publisher.objects.order_by("-name")
[<Publisher: O'Reilly>, <Publisher: Apress>]

尽管很灵活,但是每次都要用 order_by() 显得有点啰嗦。 大多数时间你通常只会对某些 字段进行排序。 在这种情况下,Django让你可以指定模型的缺省排序方式:

1
2
3
4
5
6
7
8
9
10
11
12
13
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 字段排序。

最新文章

  1. nyoj 218 Dinner(贪心专题)
  2. PE文件学习系列笔记四-C++实现PE文件的分析
  3. SQL Server安全(10/11):行级别安全(Row-Level Security)
  4. Java遍历List的时候删除item
  5. Support Vector Machine (1) : 简单SVM原理
  6. netstat(转载)
  7. SharePreference是如何实现的——序列化XML文件
  8. PHP开发异步高性能的MySQL代理服务器
  9. 使用ptrace向已运行进程中注入.so并执行相关函数
  10. Ubuntu下GCC的安装以及版本控制
  11. 12种超酷HTML5 SVG和CSS3浮动标签效果
  12. NodeJS初学者实战之旅(I) —— 介绍、目录
  13. 20151120 jsp相关
  14. pgsql 递归查询 分页
  15. electron打包vue项目
  16. vs2017使用GitHub插件发布项目到github
  17. Pycharm同步本地代码至GitHub
  18. 连接postgres特别消耗cpu资源而引发的PostgreSQL性能优化考虑
  19. java 面试基础总结(二)---多线程
  20. TF版本的Word2Vec和余弦相似度的计算

热门文章

  1. 数据库基础和JDBC
  2. android BitMap回收
  3. git 的使用
  4. HTML5 声明兼容IE的写法(转载)
  5. 【Objective-C】NSDate详解及获取当前时间等常用操作
  6. SpringMVC学习(二)
  7. 在IntelliJ IDEA中添加框架支持时找不到Hibernate的解决办法
  8. hdu 4717(三分求极值)
  9. &lt;更新日期03-31-2016&gt; 复利计算5.0 &lt;已改进&gt;
  10. Java数组技巧攻略