2011-09-04 69 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