当一个属性是模型方法时,Django QuerySet的升序/降序排序

1 投票
1 回答
1461 浏览
提问于 2025-04-16 02:02

我有一个团队的查询集,这些团队是按照学校名称排序的。其中有一个属性是一个模型方法,用来记录团队的胜率。我想把这些团队从胜率最高到最低排序。如果有团队的胜率相同,我希望它们能按照学校名称的字母顺序再排序。这样我就能得到想要的结果:

team  pct
x    0.75
a    0.50
b    0.50
c    0.50
y    0.25

因为胜率是一个模型方法,所以我一直在用Python对已经按字母顺序排列的查询集进行排序,但当我这样做时,学校的字母顺序就会丢失:

team_list = Team.objects.order_by('school')
sorted_team_list = sorted(team_list, key=lambda x: x.win_pct, reverse=True)

1 个回答

1

分两步来做,这样也不错,因为排序是稳定的:

from operator import attrgetter

sorted_team_list = sorted(team_list, key=attrgetter('school'))
sorted_team_list = sorted(sorted_team_list, key=attrgetter('win_pct'), reverse=True)

撰写回答