通过ForeignKey订购查询集

时间:2014-07-24 19:40:08

标签: django django-models

背景:有一场比赛。每个团队有三次尝试('运行')。最终得分是得分最高的运行,如果得分相同,则计算最佳时间。我想显示总排名。这是我的代码:

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'),但我如何为所有团队做到这一点?

1 个答案:

答案 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')