我已经升级到Django 2.1,当我加载管理界面时,我看到这个错误:
TypeError at /admin/foo/bar/1/change/ render() got an unexpected keyword argument 'renderer'
字符串
uemypmqf1#
这几乎可以肯定是因为Django 2.1中这个向后不兼容的变化:
renderer
Widget.render()
你可能在你的代码中,或者在你的某个依赖项的代码中,已经将django.forms.widgets.Widget子类化。代码可能看起来像这样:
django.forms.widgets.Widget
from django.forms import widgets class ExampleWidget(widgets.Widget): def render(self, name, value, attrs=None): # ...
字符串你需要修复render的方法签名,使它看起来像这样:
render
def render(self, name, value, attrs=None, renderer=None):
型看看the source code of widgets.Widget如果你想检查。
widgets.Widget
kdfy810k2#
Django正在寻找一个可以在settings.py中设置的默认渲染器
settings.py
FORM_RENDERER = 'django.forms.renderers.DjangoTemplates'
qcbq4gxm3#
这个问题的实际问题是在BoundField类的**as_widget()**函数中,位于以下位置:
your_env_path/lib/python3.11/site-packages/django/forms/boundfield.py现有代码
def as_widget(self, widget=None, attrs=None, only_initial=False): #other code response = widget.render( name=self.html_initial_name if only_initial else self.html_name, value=value, attrs=attrs, renderer=self.form.renderer, ) return response #**update the above code to** def as_widget(self, widget=None, attrs=None, only_initial=False): #other code try: response = widget.render( name=self.html_initial_name if only_initial else self.html_name, value=value, attrs=attrs, renderer=self.form.renderer, ) except: response = widget.render( name=self.html_initial_name if only_initial else self.html_name, value=value, attrs=attrs ) return response`
w8ntj3qf4#
其版本和签名不兼容问题。返回至版本-2.0.8pip3 install Django==2.0.8
4条答案
按热度按时间uemypmqf1#
这几乎可以肯定是因为Django 2.1中这个向后不兼容的变化:
renderer
参数的Widget.render()
方法的支持。你可能在你的代码中,或者在你的某个依赖项的代码中,已经将
django.forms.widgets.Widget
子类化。代码可能看起来像这样:字符串
你需要修复
render
的方法签名,使它看起来像这样:型
看看the source code of
widgets.Widget
如果你想检查。kdfy810k2#
Django正在寻找一个可以在
settings.py
中设置的默认渲染器字符串
qcbq4gxm3#
这个问题的实际问题是在BoundField类的**as_widget()**函数中,位于以下位置:
your_env_path/lib/python3.11/site-packages/django/forms/boundfield.py
现有代码
字符串
w8ntj3qf4#
其版本和签名不兼容问题。返回至版本-2.0.8
pip3 install Django==2.0.8