以下是我项目中的模型:
class Tournament(models.Model):
title = models.CharField(max_length=150)
start_date = models.DateTimeField(verbose_name="Start date")
end_date = models.DateTimeField(verbose_name="End date")
participants = models.ManyToManyField(Participant)
def __unicode__(self):
return u"%s" % self.title
class Game(models.Model):
tournament = models.ForeignKey(Tournament)
number_of_tour = models.PositiveSmallIntegerField()
opponent_white = models.ForeignKey(Participant, related_name='opponent_white', blank=True)
opponent_black = models.ForeignKey(Participant, related_name='opponent_black', blank=True)
winner = models.CharField(max_length=150, choices=(('White', 'White'), ('Black', 'Black'), ('Draw', 'Draw')), blank=True)
elo_gained_white = models.FloatField(default=0)
elo_gained_black = models.FloatField(default=0)
我的问题是我想知道每场锦标赛的参赛人数。我试图这样做:
num_of_tours = Game.objects.filter(tournament=tournament_id).annotate(Count('number_of_tour', distinct=True)).count()
但是这仍然会返回与锦标赛相关的锦标赛数量。你能告诉我这样做的方法吗?
感谢。
答案 0 :(得分:0)
所以你想要特定锦标赛中所有游戏的Sum
列number_of_tour
?我认为您可能需要aggregate
而不是annotate
和Sum
而不是Count
:
num_of_tours = Game.objects.filter(tournament=tournament_id).aggregate(total_num=Sum('number_of_tour', distinct=True))['total_num']
编辑:Daniel Roseman指出number_of_tour
可能是一个索引。这更有意义。我的错。您需要对整个查询执行不同的操作,然后对该查询进行计数。像这样:
num_of_tours = Game.objects.filter(tournament=tournament_id).distinct('number_of_tour').count()
这应该计算具有不同number_of_tour
的游戏对象的数量。我相信这就是你想要的。对不起,感到困惑。
答案 1 :(得分:0)
我想我有解决方案:
他正在寻找的是每场比赛的number_of_tours的独特数量。 每个游戏都有一个游览值,但这些值可以是两倍。所以number_of_tours就像某种id一样。
Nervosa你可以得到如此明显的价值:
num_of_tours = Game.objects.filter(tournament=tournament_id).values('number_of_tour').distinct().count()
这应该只是给你:每场锦标赛的数量不同的number_of_tours