Python 更新至1.11:TypeError build_attrs()最多接受2个参数(给定3个)
我从1.10.7更新到1.11.0,在查看表单时出现以下错误。我根本不知道我的身体出了什么问题。其他形式也以同样的方式工作。我怀疑这可能是与或的交互,但没有迹象表明它们与1.11不兼容 我如何进一步调试它Python 更新至1.11:TypeError build_attrs()最多接受2个参数(给定3个),python,django,django-forms,django-views,django-1.11,Python,Django,Django Forms,Django Views,Django 1.11,我从1.10.7更新到1.11.0,在查看表单时出现以下错误。我根本不知道我的身体出了什么问题。其他形式也以同样的方式工作。我怀疑这可能是与或的交互,但没有迹象表明它们与1.11不兼容 我如何进一步调试它 File "/home/usr/.virtualenvs/intranet/lib/python2.7/site-packages/django/core/handlers/exception.py" in inner 41. response = get_resp
File "/home/usr/.virtualenvs/intranet/lib/python2.7/site-packages/django/core/handlers/exception.py" in inner
41. response = get_response(request)
File "/home/usr/.virtualenvs/intranet/lib/python2.7/site-packages/django/core/handlers/base.py" in _get_response
187. response = self.process_exception_by_middleware(e, request)
File "/home/usr/.virtualenvs/intranet/lib/python2.7/site-packages/django/core/handlers/base.py" in _get_response
185. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/usr/.virtualenvs/intranet/lib/python2.7/site-packages/django/contrib/auth/decorators.py" in _wrapped_view
23. return view_func(request, *args, **kwargs)
File "/home/usr/.virtualenvs/intranet/lib/python2.7/site-packages/django/contrib/auth/decorators.py" in _wrapped_view
23. return view_func(request, *args, **kwargs)
File "/home/usr/repos/intranet/isotek_intranet_site/order_book/views.py" in create
161. return render(request, 'order_book/create.html', context)
File "/home/usr/.virtualenvs/intranet/lib/python2.7/site-packages/django/shortcuts.py" in render
30. content = loader.render_to_string(template_name, context, request, using=using)
File "/home/usr/.virtualenvs/intranet/lib/python2.7/site-packages/django/template/loader.py" in render_to_string
68. return template.render(context, request)
File "/home/usr/.virtualenvs/intranet/lib/python2.7/site-packages/django/template/backends/django.py" in render
66. return self.template.render(context)
File "/home/usr/.virtualenvs/intranet/lib/python2.7/site-packages/django/template/base.py" in render
207. return self._render(context)
File "/home/usr/.virtualenvs/intranet/lib/python2.7/site-packages/django/template/base.py" in _render
199. return self.nodelist.render(context)
File "/home/usr/.virtualenvs/intranet/lib/python2.7/site-packages/django/template/base.py" in render
990. bit = node.render_annotated(context)
File "/home/usr/.virtualenvs/intranet/lib/python2.7/site-packages/django/template/base.py" in render_annotated
957. return self.render(context)
File "/home/usr/.virtualenvs/intranet/lib/python2.7/site-packages/django/template/loader_tags.py" in render
177. return compiled_parent._render(context)
File "/home/usr/.virtualenvs/intranet/lib/python2.7/site-packages/django/template/base.py" in _render
199. return self.nodelist.render(context)
File "/home/usr/.virtualenvs/intranet/lib/python2.7/site-packages/django/template/base.py" in render
990. bit = node.render_annotated(context)
File "/home/usr/.virtualenvs/intranet/lib/python2.7/site-packages/django/template/base.py" in render_annotated
957. return self.render(context)
File "/home/usr/.virtualenvs/intranet/lib/python2.7/site-packages/django/template/loader_tags.py" in render
72. result = block.nodelist.render(context)
File "/home/usr/.virtualenvs/intranet/lib/python2.7/site-packages/django/template/base.py" in render
990. bit = node.render_annotated(context)
File "/home/usr/.virtualenvs/intranet/lib/python2.7/site-packages/django/template/base.py" in render_annotated
957. return self.render(context)
File "/home/usr/.virtualenvs/intranet/lib/python2.7/site-packages/django/template/base.py" in render
1046. return render_value_in_context(output, context)
File "/home/usr/.virtualenvs/intranet/lib/python2.7/site-packages/django/template/base.py" in render_value_in_context
1024. value = force_text(value)
File "/home/usr/.virtualenvs/intranet/lib/python2.7/site-packages/django/utils/encoding.py" in force_text
78. s = six.text_type(s)
File "/home/usr/.virtualenvs/intranet/lib/python2.7/site-packages/django/utils/html.py" in <lambda>
376. klass.__unicode__ = lambda self: mark_safe(klass_unicode(self))
File "/home/usr/.virtualenvs/intranet/lib/python2.7/site-packages/django/forms/boundfield.py" in __str__
41. return self.as_widget()
File "/home/usr/.virtualenvs/intranet/lib/python2.7/site-packages/django/forms/boundfield.py" in as_widget
120. **kwargs
File "/home/usr/.virtualenvs/intranet/lib/python2.7/site-packages/django/forms/widgets.py" in render
220. context = self.get_context(name, value, attrs)
File "/home/usr/.virtualenvs/intranet/lib/python2.7/site-packages/django/forms/widgets.py" in get_context
665. context = super(Select, self).get_context(name, value, attrs)
File "/home/usr/.virtualenvs/intranet/lib/python2.7/site-packages/django/forms/widgets.py" in get_context
626. context = super(ChoiceWidget, self).get_context(name, value, attrs)
File "/home/usr/.virtualenvs/intranet/lib/python2.7/site-packages/django/forms/widgets.py" in get_context
211. 'attrs': self.build_attrs(self.attrs, attrs),
Exception Type: TypeError at /order_book/create/
Exception Value: build_attrs() takes at most 2 arguments (3 given)
表格:
class MyForm(forms.ModelForm):
class Meta:
model = MyModel
fields = '__all__'
widgets = {
'manager': Select2Widget(attrs={'style': 'min-width:400px'}),
}
他们更改了Django 1.11中的build_attrs函数/ 您可能还需要使用pip升级select2和markdownx
pip安装选择2 markdownx--升级
在Django 1.11更新中,他们将build\u attrs类更改为仅使用2个参数,此时所有额外的参数现在都应以dict形式传递
因此,当您使用使用build\u attrs函数的自定义小部件时,需要将build\u attrs调用从以下位置更改:
build_attrs(attrs, foo='bizz', bar='baz')
致:
因此,罪魁祸首是Select2类。您可以通过使用新方法对渲染函数进行超级分类和覆盖来修复它,或者您可以检查作者是否有更新。@Alasdair我这样做了,如果有帮助的话。
class MyForm(forms.ModelForm):
class Meta:
model = MyModel
fields = '__all__'
widgets = {
'manager': Select2Widget(attrs={'style': 'min-width:400px'}),
}
build_attrs(attrs, foo='bizz', bar='baz')
build_attrs(attrs, {'foo':'bizz', 'bar':'baz'})