我试图通过一个查询集获取一个列表,该列表给出了一个包含不同模型字段的有序列表。
我有两种模式:
class Team(models.Model):
total_score = models.PositiveSmallIntegerField(default=0)
class Meta:
ordering = ['-total_score']
class Individual(models.Model):
team = models.ForeignKey(Team, on_delete=models.CASCADE, related_name='individuals')
score = models.PositiveSmallIntegerField(default=0)
class Meta:
ordering = ['-score']
这是我正在使用的查询集:
Team.objects.order_by('-total_score', '-individuals__score')
根据我的理解,这将通过降低总分,然后降低个人分数来排序。但是,每当我的团队总得分相同且这些团队中的个人得分相近时,此查询集就不会比较不同团队中的每个人得分。我该如何解决?我试图根据个人的得分对这些球队进行排名并打破关系。我正在使用postgresql。
修改
例如,如果我有:
球队A:球员一= 10 ,球员二= 10 ,球员三= 5 ,球员四= 0 < / strong>(总计= 25 )
B队:球员1 = 10 ,球员2 = 10 ,球员3 = 3 ,球员4 = 2 < / strong>(总计= 25 )
B队:球员1 = 10 ,球员2 = 10 ,球员3 = 2 ,球员4 = 2 < / strong>(总计= 24 )
我希望这个查询能够返回A队,B队,C队。但是它给了我B队,A队,C队。
我有一个功能可以摆脱重复:
teams = Team.objects.order_by('total_score', '-individuals__score')
for team in teams:
if squad not in dup_list:
dup_list.append(team)
rank_list.append(team)
teams = rank_list
return rank_list
答案 0 :(得分:0)
当您对-individuals__score
进行排序时,每个小组会多次出现,每个小组一次。
然后根据 个人对团队进行排序。您希望根据该团队的各个分数列表进行排序,例如比较[10,10,5,0]
和[10,10,3,2]
。您可以使用expressions执行此操作,但我对此无能为力。
如果你正在使用Postgres,一个选项可能是将ArrayField
添加到Team
,存储[10,10,5,0]
等值,并根据该值进行排序。