Django order_by()返回错误的查询集

时间:2018-05-02 21:30:06

标签: django

我试图通过一个查询集获取一个列表,该列表给出了一个包含不同模型字段的有序列表。

我有两种模式:

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

1 个答案:

答案 0 :(得分:0)

当您对-individuals__score进行排序时,每个小组会多次出现,每个小组一次。

然后根据 个人对团队进行排序。您希望根据该团队的各个分数列表进行排序,例如比较[10,10,5,0][10,10,3,2]。您可以使用expressions执行此操作,但我对此无能为力。

如果你正在使用Postgres,一个选项可能是将ArrayField添加到Team,存储[10,10,5,0]等值,并根据该值进行排序。