Django QuerySet 排序方法

排序方法

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

实例

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

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 中,上面的语句会这样写:

SELECT * FROM members ORDER BY firstname;
>

降序

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

实例

排序结果 firstname 降序:

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 中,上面的语句会这样写:

SELECT * FROM members ORDER BY firstname DESC;

多个字段排序方法

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

实例

先按lastname升序排列结果,再按id降序排列:

mydata = Members.objects.all().order_by('lastname', '-id').values()

结果

<QuerySet [
  {'id': 5, 'firstname': 'Stalikken', 'lastname': 'Refsnes'},
  {'id': 4, 'firstname': 'Lene', 'lastname': 'Refsnes'},
  {'id': 3, 'firstname': 'Linus', 'lastname': 'Refsnes'},
  {'id': 2, 'firstname': 'Tobias', 'lastname': 'Refsnes'},
  {'id': 1, 'firstname': 'Emil', 'lastname': 'Refsnes'}
]>

在 SQL 中,上面的语句会这样写:

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