一尘不染

排序查询集的好方法?-Django

django

我想做的是这样的:

获得得分最高的30位作者(Author.objects.order_by('-score')[:30]

订购作者 last_name


阅读 359

收藏
2020-04-01

共1个答案

一尘不染

关于什么

import operator

auths = Author.objects.order_by('-score')[:30]
ordered = sorted(auths, key=operator.attrgetter('last_name'))

在Django 1.4及更高版本中,你可以通过提供多个字段进行订购。
参考:https : //docs.djangoproject.com/en/dev/ref/models/querysets/#order-by

order_by(*字段)

默认情况下,a返回的结果由模型的Meta中QuerySet的ordering选项给出的排序元组排序。你可以使用order_by方法基于每个QuerySet重写此方法。

例:

ordered_authors = Author.objects.order_by('-score', 'last_name')[:30]

上面的结果将按score降序排列,然后按last_name升序排列。前面的负号”-score”表示降序。暗含升序。

2020-04-01