You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django Annotate Count异常:无已发布场景的演员统计值为1?

问题原因及解决方案

问题根源

你的代码里annotate中Count的filter=Q(state=Scene.State.PUBLISHED)存在字段作用域混淆:

  • 当前查询集针对Actor对象,Q(state=...)默认匹配的是Actor自身的state字段,而非关联场景Scene的state。
  • 前面已经通过filter(state=Actor.State.PUBLISHED)筛选出状态为PUBLISHED的演员,所以这个filter条件对所有选中的Actor都成立。最终Count('scenes')会统计该演员关联的所有场景数量,不管场景本身的状态,这就是为什么仅有PREVIEW场景的演员被算出scenes_cnt=1。

修正代码

需要明确指定统计的是Scene的state为PUBLISHED的场景,将Q(state=...)改为Q(scenes__state=...)(scenes是Actor与Scene的关联字段名):

actors = Actor.objects.filter(state=Actor.State.PUBLISHED)\
    .annotate(scenes_cnt=Count('scenes', filter=Q(scenes__state=Scene.State.PUBLISHED)))

验证效果

修正后:

  • 无已发布场景的演员,scenes_cnt会被正确计算为0
  • 有已发布场景的演员,会统计对应数量的PUBLISHED场景

内容的提问来源于stack exchange,提问作者Alex Lozovsky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 15:37:34