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
相关产品推荐
相关产品推荐

