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异常。
解决方案
补全基础数据:
通过Django后台管理、Django Shell或数据库客户端,手动向Duration表添加一条name为"yearly"的记录。优化代码逻辑:
避免直接使用get()方法(无匹配时直接抛异常),改用filter()结合first()处理空值场景:duration = Duration.objects.filter(name="yearly").first() if not duration: # 自定义不存在时的处理逻辑,比如返回404提示 return HttpResponse("年度订阅时长配置未找到", status=404)通过迁移固化数据:
如果"yearly"是项目必需的基础配置,可编写Django数据迁移文件,在项目初始化或部署时自动插入该记录,避免重复手动操作。
内容的提问来源于stack exchange,提问作者Mike garseia
相关产品推荐
相关产品推荐

