Django TypeError:render()获得了意外的关键字参数'render'

to94eoyn  于 2023-08-08  发布在  Go
关注(0)|答案(4)|浏览(181)

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

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

render() got an unexpected keyword argument 'renderer'

字符串

uemypmqf

uemypmqf1#

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

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

你可能在你的代码中,或者在你的某个依赖项的代码中,已经将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如果你想检查。

kdfy810k

kdfy810k2#

Django正在寻找一个可以在settings.py中设置的默认渲染器

FORM_RENDERER = 'django.forms.renderers.DjangoTemplates'

字符串

qcbq4gxm

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`

字符串

w8ntj3qf

w8ntj3qf4#

其版本和签名不兼容问题。返回至版本-2.0.8
pip3 install Django==2.0.8

相关问题