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

Django中如何筛选字段为特定值或null的QuerySet

Django QuerySet 筛选「字段为特定值或为null」的实现方法

要实现指定字段匹配特定值、或字段值为null的OR逻辑筛选,必须借助Django ORM的Q对象构建查询条件,不能直接连续调用filter传两个条件——连续传参默认是AND逻辑,会返回空结果。

针对type字段筛选场景(匹配"active"或null)

正确代码写法如下:

# 先导入Q对象
from django.db.models import Q

# 假设操作的模型类为你的业务模型类
result_qs = YourModel.objects.filter(
    Q(type="active") | Q(type__isnull=True)
)

关键注意点

  • 两个Q对象之间的|代表逻辑OR关系,如果是逻辑AND用&,条件取反用~,多条件组合时注意用括号控制优先级,避免逻辑错乱。
  • 判断字段值为null请统一用<字段名>__isnull=True的写法,不要直接写type=None。后者在部分数据库、特殊字段类型下会出现匹配异常,__isnull是Django官方推荐的兼容写法。
  • 如果是需要匹配多个特定值+null的场景(比如type为active、pending,或者为null),可以结合__in扩展写法:
    result_qs = YourModel.objects.filter(
        Q(type__in=["active", "pending"]) | Q(type__isnull=True)
    )
    

常见错误写法避坑

不要写成下面这种形式,两个条件默认做AND拼接,相当于要求type同时等于"active"且为null,永远返回空查询集:

# 错误写法:逻辑为AND,结果为空
wrong_qs = YourModel.objects.filter(type="active", type__isnull=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 06:19:28