Django TypeError: render() получил неожиданный аргумент ключевого слова 'renderer'
Я обновился до Django 2.1, и я вижу эту ошибку при загрузке интерфейса администратора:
TypeError at /admin/foo/bar/1/change/
render() got an unexpected keyword argument 'renderer'
Ответы
Ответ 1
Это почти наверняка из-за этого обратного-несовместимого изменения в 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):
Посмотрите исходный код widgets.Widget
если вы хотите проверить.
Ответ 2
Как указано в этой статье
https://docs.djangoproject.com/en/2.1/releases/2.1/#features-removed-in-2-1
Поддержка методов Widget.render() без аргумента рендерера удалена.
Поэтому я решил эту проблему сам, закомментировав аргумент рендерера, который был возвращен и был неожиданным.
# renderer=self.form.renderer
Как исправить:
Для этого я перешел к модулю boundfield.py, расположенному в указанном ниже пути к каталогу (Примечание. Ваш путь к каталогу определенно будет отличаться от моего), и я изменил метод as_widget, определенный в классе BoundField.
Прокомментируйте (#) или удалите строку для аргумента рендерера.
/home/codemask/Documents/DjangoProjects/BlogApp/venv/lib/python3.7/site-packages/django/forms/boundfield.py
Ниже приведен скриншот модификации, которую я вам подчеркнул: