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

Django查询Duration模型触发DoesNotExist异常求助

Django DoesNotExist 异常排查

异常核心信息

异常类型:DoesNotExist
触发路径:/yearly/subscriptions/
异常信息:Duration匹配查询不存在。

完整调用回溯

回溯(最近的调用最后):
  File "/home/ahmed/SavannahX/venv/lib/python3.9/site-packages/django/core/handlers/exception.py", line 55, in inner
    response = get_response(request)
  File "/home/ahmed/SavannahX/venv/lib/python3.9/site-packages/django/core/handlers/base.py", line 197, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/home/ahmed/SavannahX/venv/lib/python3.9/site-packages/django/contrib/auth/decorators.py", line 23, in _wrapped_view
    return view_func(request, *args, **kwargs)
  File "/home/ahmed/SavannahX/app/views.py", line 1352, in yearly_subscription_plans
    duration = Duration.objects.get(name="yearly")
  File "/home/ahmed/SavannahX/venv/lib/python3.9/site-packages/django/db/models/manager.py", line 85, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/home/ahmed/SavannahX/venv/lib/python3.9/site-packages/django/db/models/query.py", line 496, in get
    raise self.model.DoesNotExist(

问题原因

代码在views.py第1352行尝试通过Duration.objects.get(name="yearly")获取指定记录,但数据库的Duration表中不存在name字段值为"yearly"的条目,触发了Django的DoesNotExist异常。

解决方案

  1. 补全基础数据:
    通过Django后台管理、Django Shell或数据库客户端,手动向Duration表添加一条name为"yearly"的记录。

  2. 优化代码逻辑:
    避免直接使用get()方法(无匹配时直接抛异常),改用filter()结合first()处理空值场景:

    duration = Duration.objects.filter(name="yearly").first()
    if not duration:
        # 自定义不存在时的处理逻辑,比如返回404提示
        return HttpResponse("年度订阅时长配置未找到", status=404)
    
  3. 通过迁移固化数据:
    如果"yearly"是项目必需的基础配置,可编写Django数据迁移文件,在项目初始化或部署时自动插入该记录,避免重复手动操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 12:45:37