任何人都可以帮助我吗
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 :(得分: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))