Django循环传入pk调用objects.get提示匹配查询不存在如何解决
Django中objects.get查询报a matching query does not exist的解决方案
报错根因
你遇到的报错和参数类型没有关系:Django ORM的objects.get()方法要求查询结果必须存在且仅存在1条匹配记录,只要数据库中不存在你传入的pk对应的djangonote记录,就会直接抛出该异常。
常见触发原因
- 你代码里写的循环是
for i in range(3),实际遍历的是0、1、2三个值,而Django模型默认的自增主键从1开始生成,pk=0的记录基本不存在,第一次循环就会触发报错。 - 即使你遍历的是1~100的数值,也不能保证所有数值都对应有效记录:数据删除、创建失败、事务回滚都会导致自增主键断层,不会保持连续。
修复方案
如果需要遍历查询且避免不存在的记录直接中断程序,改用filter().first()组合查询:没有匹配记录时会返回None,可自行判断处理。
优化后代码示例:
for i in range(1, 101): # range左闭右开,要遍历1~100需要传入1和101作为起止参数 an = djangonote.objects.filter(pk=i).first() if an: print(an.id) else: print(f"主键{i}无对应记录")
如果确认要使用get()方法,也可以捕获异常做兼容处理:
from django.core.exceptions import ObjectDoesNotExist for i in range(1, 101): try: an = djangonote.objects.get(pk=i) print(an.id) except ObjectDoesNotExist: print(f"主键{i}无对应记录")
内容的提问来源于stack exchange,提问作者Ryan White
相关产品推荐
相关产品推荐

