Django Admin访问Story表时突发AttributeError错误求助
Django Admin访问story表报错问题
原本运行正常的Django项目,近期访问/admin/storyage/story/打开story表的Admin视图时突然报错,此前无此问题。以下是完整错误详情及排查修复方案:
核心错误信息
AttributeError at /admin/storyage/story/ 'super' object has no attribute 'dicts' and no __dict__ for setting new attributes
环境信息
- Django版本:4.2.30
- Python版本:3.14.3
- 已安装应用:
['storyage.apps.StoryageConfig', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'bootstrap5'] - 已安装中间件:
['django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware']
模板错误详情
在模板
C:\Users\never\AppData\Roaming\Python\Python314\site-packages\django\contrib\admin\templates\admin\change_list.html第46行出错:'super' object has no attribute 'dicts' and no __dict__ for setting new attributes
对应模板代码片段:
36 : {% endblock %} 37 : {% endif %} 38 : 39 : {% block coltype %}{% endblock %} 40 : 41 : {% block content %} 42 : <div id="content-main"> 43 : {% block object-tools %} 44 : <ul class="object-tools"> 45 : {% block object-tools-items %} 46 : {% change_list_object_tools %} 47 : {% endblock %} 48 : </ul> 49 : {% endblock %}
错误回溯
Traceback (most recent call last): File "C:\Users\never\AppData\Roaming\Python\Python314\site-packages\django\core\handlers\exception.py", line 55, in inner response = get_response(request) ^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\never\AppData\Roaming\Python\Python314\site-packages\django\core\handlers\base.py", line 220, in _get_response response = response.render() ^^^^^^^^^^^^^^^^^ File "C:\Users\never\AppData\Roaming\Python\Python314\site-packages\django\template\response.py", line 114, in render self.content = self.rendered_content ^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\never\AppData\Roaming\Python\Python314\site-packages\django\template\response.py", line 92, in rendered_content return template.render(context, self._request) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\never\AppData\Roaming\Python\Python314\site-packages\django\template\backends\django.py", line 61, in render return self.template.render(context) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\never\AppData\Roaming\Python\Python314\site-packages\django\template\base.py", line 175, in render return self._render(context) ^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\never\AppData\Roaming\Python\Python314\site-packages\django\template\base.py", line 167, in _render return self.nodelist.render(context) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\never\AppData\Roaming\Python\Python314\site-packages\django\template\base.py", line 1005, in render return SafeString("".join([node.render_annotated(context) for node in self])) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\never\AppData\Roaming\Python\Python314\site-packages\django\template\base.py", line 966, in render_annotated return self.render(context) ^^^^^^^^^^^^^^^^^^^^ File "C:\Users\never\AppData\Roaming\Python\Python314\site-packages\django\template\loader_tags.py", line 157, in render return compiled_parent._render(context) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\never\AppData\Roaming\Python\Python314\site-packages\django\template\base.py", line 167, in _render return self.nodelist.render(context) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\never\AppData\Roaming\Python\Python314\site-packages\django\template\base.py", line 1005, in render return SafeString("".join([node.render_annotated(context) for node in self])) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\never\AppData\Roaming\Python\Python314\site-packages\django\template\base.py", line 966, in render_annotated return self.render(context) ^^^^^^^^^^^^^^^^^^^^ File "C:\Users\never\AppData\Roaming\Python\Python314\site-packages\django\template\loader_tags.py", line 157, in render return compiled_parent._render(context) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\never\AppData\Roaming\Python\Python314\site-packages\django\template\base.py", line 167, in _render return self.nodelist.render(context) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\never\AppData\Roaming\Python\Python314\site-packages\django\template\base.py", line 1005, in render return SafeString("".join([node.render_annotated(context) for node in self])) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\never\AppData\Roaming\Python\Python314\site-packages\django\template\base.py", line 966, in render_annotated return self.render(context) ^^^^^^^^^^^^^^^^^^^^ File "C:\Users\never\AppData\Roaming\Python\Python314\site-packages\django\template\loader_tags.py", line 63, in render result = block.nodelist.render(context) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\never\AppData\Roaming\Python\Python314\site-packages\django\template\base.py", line 1005, in render return SafeString("".join([node.render_annotated(context) for node in self])) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\never\AppData\Roaming\Python\Python314\site-packages\django\template\base.py", line 966, in render_annotated return self.render(context) ^^^^^^^^^^^^^^^^^^^^ File "C:\Users\never\AppData\Roaming\Python\Python314\site-packages\django\template\loader_tags.py", line 63, in render result = block.nodelist.render(context) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\never\AppData\Roaming\Python\Python314\site-packages\django\template\base.py", line 1005, in render return SafeString("".join([node.render_annotated(context) for node in self])) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\never\AppData\Roaming\Python\Python314\site-packages\django\template\base.py", line 966, in render_annotated return self.render(context) ^^^^^^^^^^^^^^^^^^^^ File "C:\Users\never\AppData\Roaming\Python\Python314\site-packages\django\template\loader_tags.py", line 63, in render result = block.nodelist.render(context) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\never\AppData\Roaming\Python\Python314\site-packages\django\template\base.py", line 1005, in render return SafeString("".join([node.render_annotated(context) for node in self])) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\never\AppData\Roaming\Python\Python314\site-packages\django\template\base.py", line 966, in render_annotated return self.render(context) ^^^^^^^^^^^^^^^^^^^^ File "C:\Users\never\AppData\Roaming\Python\Python314\site-packages\django\contrib\admin\templatetags\base.py", line 45, in render return super().render(context) ^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\never\AppData\Roaming\Python\Python314\site-packages\django\template\library.py", line 271, in render new_context = context.new(_dict) ^^^^^^^^^^^^^^^^^^ File "C:\Users\never\AppData\Roaming\Python\Python314\site-packages\django\template\context.py", line 265, in new new_context = super().new(values) ^^^^^^^^^^^^^^^^^^^ File "C:\Users\never\AppData\Roaming\Python\Python314\site-packages\django\template\context.py", line 110, in new new_context = copy(self) ^^^^^^^^^^ File "C:\Python314\Lib\copy.py", line 82, in copy return copier(x) ^^^^^^^^^ File "C:\Users\never\AppData\Roaming\Python\Python314\site-packages\django\template\context.py", line 158, in __copy__ duplicate = super().__copy__() ^^^^^^^^^^^^^^^^^^ File "C:\Users\never\AppData\Roaming\Python\Python314\site-packages\django\template\context.py", line 39, in __copy__ duplicate.dicts = self.dicts[:] ^^^^^^^^^^^^^^^ Exception Type: AttributeError at /admin/storyage/story/ Exception Value: 'super' object has no attribute 'dicts' and no __dict__ for setting new attributes
排查与修复方案
- 降级Python版本:Django 4.2.x官方仅支持Python 3.8-3.11,你使用的Python 3.14.3版本过高,内部机制变化导致Django上下文复制逻辑出错。优先降级到Python 3.11,重新安装依赖后测试。
- 检查Admin自定义代码:如果近期修改过
Story模型的Admin类(比如自定义了change_list_object_tools相关的模板标签或方法),临时注释掉自定义代码,恢复默认Admin设置,验证是否还报错。 - 排查第三方库冲突:移除
INSTALLED_APPS中的bootstrap5,重启服务测试,确认是否是该库与Django Admin的上下文处理冲突。 - 升级Django到同系列最新版:虽然4.2.x不支持Python 3.14,但升级到4.2系列的最新补丁版本,可能包含部分兼容性修复。
内容的提问来源于stack exchange,提问作者Siffrin




