﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
33445	MultiWidget doesn't call subwidgets' render() methods.	Maxim Danilov	nobody	"Subwidget don't rendered correctly in Miltiwidget, if Subwidget have own render method.

How i found it: In Multiwidget I use CKEditorWidget(forms.Textarea), whose have own render.

How to reproduce error:

Put MyWidget like a subwidget in multiwidget.
{{{
Class MyWidget(TextInput):
    def render(self, *args, **kwargs):
        print('hello world')
        return super().render(*args, **kwargs)
}}}

Nobody can see ""Hello world"" after Multiwidget render.

How i patch it - add subwidget.render call in context. 

{{{
# in Multiwidget:
def get_context(self, name, value, attrs):
...
context['widget']['subwidgets'] = (self.rednder_subwidget(subwidget, **subwidget_context) for subwidget, subwidget_context in zip(self.widgets, context['widget']['subwidgets']))
...
 
# add
    @staticmethod
    def rednder_subwidget(subwidget, **kwargs):
        kwargs['render'] = lambda: mark_safe(subwidget.render(kwargs['name'], kwargs['value'], attrs=kwargs['attrs'], renderer=kwargs.get('renderer')))
        return kwargs

in multiwitget template:
{% spaceless %}{% for widget in widget.subwidgets %}{{widget.render}}{% endfor %}{% endspaceless %}
}}}

Other possibility - write in documentation: MultiWidget works only with native Built-in Django widgets."	New feature	closed	Forms	4.0	Normal	needsinfo	Forms, multiwidget, subwidget render.	Matthias Kestenholz David Smith	Unreviewed	0	0	0	0	0	0
