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

Django中QuerySet与对象id对比时!=不等于运算符的使用方法

Django QuerySet 不等于查询实现方案

Django ORM 的filter()方法不直接支持!=运算符,你写的filter(id!=v['Id'])属于非法写法:Python会先在当前上下文计算id!=v['Id']的布尔值,再传入ORM,完全无法实现过滤效果。

不等于查询的正确写法

如果确实需要查询id不等于指定值的记录,有两种标准实现:

  • 用exclude()反向过滤,最直观
# 得到所有id不等于v['Id']的记录
not_match_qs = icformkeyinput.exclude(id=v['Id'])
  • 结合Q对象取反,适合复杂多条件场景
from django.db.models import Q
not_match_qs = icformkeyinput.filter(~Q(id=v['Id']))

适配你的需求的最佳实现

你的核心需求是判断指定id不存在时新增记录,不需要专门写不等于查询,直接用exists()方法判断存在性即可,性能更高,也不会抛出matching query does not exist错误:

# 判断指定id不存在
if not icformkeyinput.filter(id=v['Id']).exists():
    # 执行新增逻辑,示例如下,替换为你实际的模型字段
    YourModel.objects.create(
        id=v['Id'],
        name=v['name'],
        lastname=v['lastname']
    )

补充说明:你之前遇到的matching query does not exist报错,大概率是使用了get()方法查询不存在的记录导致的,filter()方法本身查询不到匹配项只会返回空QuerySet,不会抛出异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 10:39:02