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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 06:45:04