You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

排查与修复方案

  1. 降级Python版本:Django 4.2.x官方仅支持Python 3.8-3.11,你使用的Python 3.14.3版本过高,内部机制变化导致Django上下文复制逻辑出错。优先降级到Python 3.11,重新安装依赖后测试。
  2. 检查Admin自定义代码:如果近期修改过Story模型的Admin类(比如自定义了change_list_object_tools相关的模板标签或方法),临时注释掉自定义代码,恢复默认Admin设置,验证是否还报错。
  3. 排查第三方库冲突:移除INSTALLED_APPS中的bootstrap5,重启服务测试,确认是否是该库与Django Admin的上下文处理冲突。
  4. 升级Django到同系列最新版:虽然4.2.x不支持Python 3.14,但升级到4.2系列的最新补丁版本,可能包含部分兼容性修复。

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

火山引擎 最新活动