2014-06-30 80 views
0

多個批註誰能幫我這個Django的帶過濾器

qs = Vine.objects.annotate(votos_count=Count('votomoderacion')).\ 
      annotate(votos_ok=Count('votomoderacion')).filter(votomoderacion__voto="1").\ 
      annotate(votos_no_ok=Count('votomoderacion')).filter(votomoderacion__voto="0") 

的問題是,過濾器會影響到所有的註釋,我想每一個單獨的註釋濾波器。

我希望我已經足夠克萊爾與我的問題。

謝謝!

+0

爲了澄清,你想要的計數:總票,贊成票,沒有票? – Hamish

+0

確切的,這就是我的查詢集所需要的。 @Hamish –

回答

0

你必須明白,你在做什麼是鏈接過濾器。

首先,您有一個帶有註釋票數的查詢集,如annotate(votos_ok=Count('votomoderacion')).filter(votomoderacion__voto="1")

然後你用它註釋了votes_ok並像annotate(votos_ok=Count('votomoderacion')).filter(votomoderacion__voto="1")那樣對它進行了過濾,它給了你另一個過濾的查詢集。

但在此之後,您添加了另一個篩選器annotate(votos_no_ok=Count('votomoderacion')).filter(votomoderacion__voto="0"),它過濾了您從前一個篩選器獲得的查詢集。所以,在這種情況下,你沒有得到你想要的結果。

如果你將它們分開,那麼它們會更好。像:

total_votes= Vine.objects.annotate(votos_count=Count('votomoderacion')) 
yes_votes= Vine.objects.annotate(votos_ok=Count('votomoderacion')).filter(votomoderacion__voto="1") 
no_votes= Vine.objects.annotate(votos_no_ok=Count('votomoderacion')).filter(votomoderacion__voto="0") 

加入這些查詢集:

from itertools import chain 
allvotes = list(chain(total_votes, yes_votes, no_votes)) 
+0

感謝@ ruddra,但我需要1個queryset中的所有這些查詢集。有什麼方法可以加入它們? –

+0

是的,@MikiTorandell你必須使用鏈:) – ruddra

+0

嗨@ruddra,感謝您的幫助,但我試圖鏈時出現此錯誤:'列表'對象沒有屬性'過濾器'。任何建議? –