2014-06-30 83 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,感谢您的帮助,但我试图链时出现此错误:'列表'对象没有属性'过滤器'。任何建议? –