背景:有一场比赛。每个团队有三次尝试('运行')。最终得分是得分最高的运行,如果得分相同,则计算最佳时间。我想显示总排名。这是我的代码:
class Team(models.Model):
#attributes
def get_best_run(self):
return self.run_set.order_by('-score', 'seconds')[0]
class Run(models.Model):
team = models.ForeignKey('Team')
round_number = models.IntegerField('round')
score = models.IntegerField('score')
seconds = models.IntegerField('score')
现在我想按照他们的最佳分数对球队进行排序。如果给定一个特定的团队,我可以self.run_set.order_by('score', 'seconds')
,但我如何为所有团队做到这一点?
答案 0 :(得分:1)
这有点棘手。使用注释来计算每次的最大分数很简单,并按此排序。
from django.db.models import Max
Team.objects.annotate(max_score=Max('run__score')).order_by('max_score')
但是,这并没有考虑到秒值。我不确定这是否有效:
Team.objects.annotate(max_score=Max('run__score')).annotate(max_seconds=Max('run__seconds')).order_by('max_score', 'max_seconds')