我正在尝试获取已登录用户在市场上的侵权次数。 登录的用户是组的一部分。我遇到的问题是它仍在计算不属于该组的市场项目的值(value)。它在查询集中添加了 0,打破了我的图表,
u = request.user.groups.all()[0].id
mar_count = Marketplace.objects.annotate(infringement_count=Count('infringement', filter=Q(groups=u)))
结果 'Ebay','Amazon','Facebook','Wallmart', '0','0','0','0','1','1','1','1',
我应该得到 'Ebay','Amazon','Facebook','Wallmart', '1','1','1','1',
当市场不属于已登录用户组时,我如何排除对市场的计数?我是新的。谢谢
最佳答案
您可以过滤掉 Marketplace
,因此不在 .annotate(..)
clause [Django-doc] 中:
u = request.user.groups.all()[0].id
mar_count = Marketplace.objects.filter(groups=u).annotate(
infringement_count=Count('infringement')
)
计数将始终为一(如果 ingrigment
为 None
,则为零)。
您的代码片段的一个问题是它总是只适用于该用户的第一个 组,并且可以是该用户所属的任何组,因此它不是很一致。如果你想计算 user
所属的所有组,你可以使用:
mar_count = Marketplace.objects.filter(groups__user=request.user).annotate(
infringement_count=Count('infringement')
)
这里的计数将始终是“匹配”组的数量,如果 infrigment
为 NULL
,则为 0
。
关于python - 如何在 charts.js 的查询集中排除空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74424645/