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

Django筛选投票数≤0的Answer时0票数据无法返回如何解决

问题原因

  • likes是多对多关联字段,直接使用filter(likes__lte=0)并非统计点赞数量,而是在匹配多对多关联表中关联的用户ID是否小于等于0,自然无法得到预期结果。
  • 尝试likes__level__lte=0报错是因为likes关联的是User模型,User模型不存在level字段,因此触发无效查询字段的报错。
  • 之前筛选lte=1仅返回1赞回答属于巧合:你的写法实际匹配的是关联了ID=1的用户的回答,而这些回答刚好只有1个点赞,所以出现了看似匹配到1赞回答的误判。

解决方案

方案1:注解统计点赞数后筛选(适用所有数值范围的点赞数筛选)

先导入Django的计数函数:

from django.db.models import Count

修改查询代码为:

def answers(request):
    # 先给每个回答注解点赞数量,再筛选点赞数<=0的结果
    answers = Answer.objects.annotate(like_count=Count('likes')).filter(like_count__lte=0).count()
    context = {'answers':answers}
    return render(request, 'answers.html', context)

方案2:直接筛选无关联的多对多字段(仅适用点赞数为0的场景)

如果只需要统计没有任何点赞的回答,可以用更简洁的写法:

def answers(request):
    # 多对多字段isnull=True代表没有关联任何用户,即点赞数为0
    answers = Answer.objects.filter(likes__isnull=True).count()
    context = {'answers':answers}
    return render(request, 'answers.html', context)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 13:27:01