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

Django ORM使用exclude实现任意条件为真即排除数据问题

问题根源

Django ORM的exclude()方法传入多个逗号分隔的参数时,默认采用AND逻辑,仅当所有条件同时满足时才会排除对应记录,和你需要的「任意条件满足就排除」的OR逻辑不符。
你当前的写法exclude(rated_1=False, rated_2=False)实际执行逻辑是:排除同时满足rated_1为假且rated_2为假的记录,和预期要求完全相反。

解决方案

使用Django的Q对象实现OR逻辑的排除条件:

  1. 在views.py头部导入Q对象:
from django.db.models import Q
  1. 修改查询语句:
def page(request):
    queryset = Rate.objects.filter(completed=False).exclude(Q(rated_1=True) | Q(rated_2=True))
    context = {'queryset':queryset}
    return render(request, 'page.html', context)

效果说明

修改后查询保留的记录需要同时满足以下所有要求:

  • completed字段值为False
  • rated_1字段值为False
  • rated_2字段值为False
    只要rated_1或rated_2任意一个为真,对应记录就会被排除,完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 03:27:04