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;