Django带过滤器的多个注释

时间:2014-06-30 01:32:45

标签: django annotations

任何人都可以帮助我吗

 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")

问题是过滤器会影响所有注释,我想分别过滤每个注释。

我希望我对自己的问题充分肯定。

谢谢!

1 个答案:

答案 0 :(得分: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))
相关问题