2011-09-04 72 views
2

我有以下型号:Django的注释问题

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

这个技巧是使用values方法来选择你想要聚合的字段。

Pick.objects.filter(league=2).values('result').aggregate(wins=Count('result')) 
+0

感谢您的回复,虽然恐怕我不太明白如何使用值将帮助我找到胜利,损失和关系的单个查询。你介意扩展你的例子多一点? – user417918