我已经升级到Django 2.1,并且在加载管理界面时看到此错误:
TypeError at /admin/foo/bar/1/change/ render() got an unexpected keyword argument 'renderer'
答案 0 :(得分:25)
几乎可以肯定是因为这个向后不兼容的change in 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):
# ...
您需要修复render
的方法签名,以使其看起来像这样:
def render(self, name, value, attrs=None, renderer=None):
如果要检查,请查看the source code of widgets.Widget
。
答案 1 :(得分:0)
如本文所述
https://docs.djangoproject.com/en/2.1/releases/2.1/#features-removed-in-2-1
对不带renderer参数的Widget.render()方法的支持被删除。
所以我自己通过注释掉返回的和非预期的renderer参数解决了这个问题。
# renderer=self.form.renderer
如何解决: 为此,我导航到位于下面指定的目录路径中的名为boundfield.py的模块(注意:您的目录路径肯定与我的不同),并修改了BoundField类下定义的as_widget方法。
注释(#)或删除渲染器参数的行。
/home/codemask/Documents/DjangoProjects/BlogApp/venv/lib/python3.7/site-packages/django/forms/boundfield.py
答案 2 :(得分:-1)
其版本和签名不兼容问题。 返回版本-2.0.8
pip3 install Django == 2.0.8
答案 3 :(得分:-1)
Django正在寻找可以在settings.py
FORM_RENDERER = 'django.forms.renderers.DjangoTemplates'