django对数据查询结果进行排序的方法

在你的 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 字段排序。

时间: 2025-01-20 04:46:15

django对数据查询结果进行排序的方法的相关文章

grails过滤器和数据查询的几个重要方法

一  简单的查询方法 1.findAllWhere的使用 在grails中find和findAll的区别是find默认取出查询出来的第一条的记录,findAll则是查询出全部记录 def useFindAllWhere() { def city=CityInfo.findAllWhere(code:"HK",id:1) Iterator<CityInfo> it=city.iterator(); def buf=new StringBuffer(); while(it.ha

Django(数据查询)

如何治单独测试django中的某一个py文件 书写测试脚本: - 在应用下的tests.py或者自己建一个py文件 - 在文件中书写以下内容: if __name__ == "__main__": os.environ.setdefault("DJANGO_SETTINGS_MODULE", "day53.settings") import django django.setup() 创建表格: class Movie(models.Model)

Yii2 数据查询

数据查询 User::find()->all(); 此方法返回所有数据: User::findOne($id); 此方法返回 主键 id=1 的一条数据(举个例子): User::find()->where(['name' => '小伙儿'])->one(); 此方法返回 ['name' => '小伙儿'] 的一条数据: User::find()->where(['name' => '小伙儿'])->all(); 此方法返回 ['name' => '小

SqlServer中的UNION操作符在合并数据时去重的原理以及UNION运算符查询结果默认排序的问题

原文:SqlServer中的UNION操作符在合并数据时去重的原理以及UNION运算符查询结果默认排序的问题 本文出处:http://www.cnblogs.com/wy123/p/7884986.html 周围又有人在讨论UNION和UNION ALL,对于UNION和UNION ALL,网上说的最多的就是性能问题(实在不想说出来这句话:UNION ALL比UNION快)其实根本不想炒UNION和UNION ALL这碗剩饭了,每次看到网上说用这个不用那个,列举的一条一条的那种文章,只要看到说U

django前后端分离 form_03(验证,数据查询,代码优化)

1.优化代码 把form验证的返回报错写成一个共用的类 该类在工程下建立了一个uitls-tools.py class FormatErrMsg: @property #装饰器-属性方法 调用的时候不需要加() def error_msg(self): #self.get_json_data() 是form自带的友好的报错提示 返回的是一个字典 message = '' for error_params, v in self.errors.get_json_data().items(): err

Django 聚合与查询集API

本文从Django官方文档总结而来,将聚合的主要用法和查询集的常见方法做一归纳. 聚合 1. 聚合的产生来源于django数据库查询,通常我们使用django查询来完成增删查改,但是有时候需要更复杂的方法才能完成对数据的提取.筛选.更改,所以需要一组对象聚合来完成这种操作.模型举例如下: from django.db import models class Author(models.Model): name = models.CharField(max_length=100) age = mo

【Django】QuerySet的分页和排序

数据查询分页功能和排序功能大家都很熟悉,本文以一个小例子介绍一下Django后台实现 数据列表 id依次从6到1 [ { "detail": "this is test", "CreateTime": "2016-05-22 00:06:36", "ModifyTime": "2016-05-22 00:06:36", "IsDelete": "False&

django下常用查询的API

django.db.models.query.QuerySet QuerySet的特点:1.是可迭代2.可切片 查询相关的API:1.get(**kwargs):返回与所给的筛选条件相匹配的对象,返回结果有且只有一个.如果符合筛选条件的对象超过一个,就会抛出MultipleObjectsReturned异常,如果没有找到符合筛选条件的对象,就会抛出DoesNotExist异常.2.all():查询所有结果3.filter(**kwargs):包含了与所给的筛选条件相匹配的对象4.exclude(

django orm 的查询条件

Django的ORM查询操作: 查询数据库操作是一个非常重要的技术.在Django中,查询一般就是使用filter.exclude.get三个方法来实现,在调用这些方法的时候传递不同的参数来实现查询需求. 在mysql中,想要查询数据,就需要使用where关键字加上字段条件去查询,在Django的orm之中,我们使用filter.exclude.get关键词加上field+__+condition作为关键词去查询,现在我们就来介绍一下这里的condition: 注:查询原生SQL语句: 1.在q