Django QuerySet 排序

排序

为了对查询集进行排序,Django 使用 order_by() 方法:

实例

按 firstname 的字母顺序排列结果:

  1. mydata = Members.objects.all().order_by('firstname').values()
结果
<QuerySet [
 {'id': 1, 'firstname': 'Emil', 'lastname': 'Refsnes'},
 {'id': 4, 'firstname': 'Lene', 'lastname': 'Refsnes'},
 {'id': 3, 'firstname': 'Linus', 'lastname': 'Refsnes'},
 {'id': 5, 'firstname': 'Stalikken', 'lastname': 'Refsnes'},
 {'id': 2, 'firstname': 'Tobias', 'lastname': 'Refsnes'}
]>

在 SQL 中,上述语句的编写方式如下:

  1. SELECT * FROM members ORDER BY firstname;

倒序排列

默认情况下,结果按升序排序(首先是最小值),要想更改为降序(首先是最大值),请在字段名前使用 - 减号(NOT):

实例

将结果 firstname 降序排列:

  1. mydata = Members.objects.all().order_by('-firstname').values()
结果
<QuerySet [
 {'id': 2, 'firstname': 'Tobias', 'lastname': 'Refsnes'},
 {'id': 5, 'firstname': 'Stalikken', 'lastname': 'Refsnes'},
 {'id': 3, 'firstname': 'Linus', 'lastname': 'Refsnes'},
 {'id': 4, 'firstname': 'Lene', 'lastname': 'Refsnes'},
 {'id': 1, 'firstname': 'Emil', 'lastname': 'Refsnes'}
]>

在 SQL 中,上述语句的编写方式如下:

  1. SELECT * FROM members ORDER BY firstname DESC;

多字段排序

要按多个字段排序,请 order_by() 方法中用逗号分隔字段名:

实例

按 lastname 升序排列结果,然后按 id 降序排列:

  1. mydata = Members.objects.all().order_by('lastname', '-id').values()
结果
<QuerySet [
  {'id': 2, 'firstname': 'Tobias', 'lastname': 'Refsnes'},
  {'id': 5, 'firstname': 'Stalikken', 'lastname': 'Refsnes'},
  {'id': 3, 'firstname': 'Linus', 'lastname': 'Refsnes'},
  {'id': 4, 'firstname': 'Lene', 'lastname': 'Refsnes'},
  {'id': 1, 'firstname': 'Emil', 'lastname': 'Refsnes'}
]>

在 SQL 中,上述语句的编写方式如下:

  1. SELECT * FROM members ORDER BY lastname ASC, id DESC;