【发布时间】:2018-05-02 21:30:06
【问题描述】:
我正在尝试通过一个查询集获取一个列表,该查询集为我提供了一个包含跨不同模型的字段的有序列表。
我有两个模型:
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(总计 = 25)
B队:选手一=10,选手二=10,选手三=3,选手四=2(总计 = 25)
B队:选手一=10,选手二=10,选手三=2,选手四=2(总计 = 24)
我希望此查询返回 Team A、Team B、Team C。但它给了我 Team B、Team A、Team 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
【问题讨论】:
-
做一个 print(Team.objects.order_by('-total_score', '-individuals__score').query) 并检查 SQL 并查看它对你的影响。
-
不清楚您希望通过
'-individuals__score'命令团队做什么。它将多次返回相同的团队对象,对于查询集中的每个人一次。请参阅note in the docs 了解更多信息。 -
我添加了更多细节@Alasdair 你能弄清楚发生了什么吗?
标签: django