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

访问Django/admin页面出现DoesNotExist错误,特定链接可正常显示求助

解决Django访问/admin出现DoesNotExist错误的问题

问题分析

访问http://127.0.0.1:8000/admin时抛出DoesNotExist错误,但访问带next参数的登录链接正常,核心原因是:请求/admin时被错误路由到了你的index视图,而视图中执行ToDoList.objects.get(name='admin')时,数据库里不存在名为admin的ToDoList实例,因此触发异常。

解决方案

1. 检查并修正路由规则

你提供的项目urls.py中,path('admin/', admin.site.urls)确实排在include("main.url")之前,但问题大概率出在main应用的urls.py中——里面可能存在一个能匹配任意字符串的路由规则(比如<str:name>),导致/admin路径被误匹配。

比如,如果你的main/urls.py是这样的:

from django.urls import path
from . import views

urlpatterns = [
    path('<str:name>', views.index),
]

这种情况下,访问/admin时,Django会将admin作为name参数传入index视图,触发不存在的查询。

修正方法:给业务路由添加前缀,避免和admin路由冲突:

# main/urls.py
from django.urls import path
from . import views

urlpatterns = [
    # 给你的列表页面添加前缀,比如/list/
    path('list/<str:name>', views.index),
]

这样只有访问http://127.0.0.1:8000/list/xxx时才会触发index视图,不会干扰/admin的正常路由。

2. 验证Admin模型注册(可选但推荐)

虽然不是当前错误的直接原因,但确保你在main/admin.py中注册了模型,才能在admin后台正常管理数据:

# main/admin.py
from django.contrib import admin
from .models import ToDoList, Items

admin.site.register(ToDoList)
admin.site.register(Items)

3. 验证数据库数据(临时 workaround)

如果你的业务逻辑确实需要name='admin'的ToDoList实例,可以通过Django shell创建:

python manage.py shell

然后执行:

from main.models import ToDoList
ToDoList.objects.create(name='admin')

不过这只是临时方案,更合理的做法还是通过路由前缀隔离业务和admin路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 22:55:26