Django TypeError:render()得到了一个意外的关键字参数'renderer'

Fli*_*imm 17 django

我已升级到Django 2.1,当我加载管理界面时,我看到了这个错误:

TypeError at /admin/foo/bar/1/change/

render() got an unexpected keyword argument 'renderer'
Run Code Online (Sandbox Code Playgroud)

Fli*_*imm 46

这几乎可以肯定是因为Django 2.1中这种向后兼容的变化:

  • Widget.render()renderer删除对不带参数的方法的支持.

您可能django.forms.widgets.Widget在代码中或在您的某个依赖项的代码中有子类.代码可能如下所示:

from django.forms import widgets

class ExampleWidget(widgets.Widget):
    def render(self, name, value, attrs=None):
        # ...
Run Code Online (Sandbox Code Playgroud)

您需要修复方法签名render,以便它看起来像这样:

    def render(self, name, value, attrs=None, renderer=None):
Run Code Online (Sandbox Code Playgroud)

看看你想要检查的源代码widgets.Widget.

  • 当前版本的django-datetime-widget与Django 2.1结合使用时会导致此问题,尽管存在拉动请求以修复当前未决的问题。 (2认同)
  • 除了回溯只列出核心 Django 文件,没有自定义代码,所以不清楚是什么小部件导致了错误。 (2认同)
  • 完全正确,令人沮丧的是您无法获得有关此错误的正确堆栈跟踪,因为根本原因可能位于任意数量的依赖项中,或者位于您自己的代码中。值得庆幸的是,一个简单的修复。我认为发现此错误的最佳方法是在您的项目上尝试按 Ctrl+Shift+F 并查找过时的方法签名 (2认同)