django注释问题

时间:2011-09-04 03:33:48

标签: django orm annotations

我有以下型号:

class Pick(models.Model):
league = models.ForeignKey(League)
user = models.ForeignKey(User)
team = models.ForeignKey(Team)
week = models.IntegerField()
result = models.IntegerField(default=3, help_text='loss=0, win=1, tie=2, not started=3, in progress=4')

我正在尝试根据结果生成一个排名表,但我不确定如何在一个查询中完成它。我有兴趣为特定联盟中的每个用户获得= 1(作为胜利),0(作为损失)和2作为平局的结果的计数。我唯一能想到的是做3个单独的查询,我过滤结果然后注释如下:

Pick.objects.filter(league=2, result=1).annotate(wins=Count('result'))
Pick.objects.filter(league=2, result=0).annotate(losses=Count('result'))
Pick.objects.filter(league=2, result=2).annotate(ties=Count('result'))

有没有更有效的方法来实现这一目标?

谢谢!

1 个答案:

答案 0 :(得分:1)

这样做的诀窍是使用values方法只选择要聚合的字段。

Pick.objects.filter(league=2).values('result').aggregate(wins=Count('result'))
相关问题