Fixed #27723 -- Set MultiWidget's subwidgets input type from attrs argument.

Regression in b52c73008a.
This commit is contained in:
Mariusz Felisiak 2017-01-13 12:34:33 +01:00 committed by Tim Graham
parent 3226536127
commit 974d14534c
2 changed files with 16 additions and 0 deletions

View File

@ -808,9 +808,12 @@ class MultiWidget(Widget):
value = self.decompress(value) value = self.decompress(value)
final_attrs = context['widget']['attrs'] final_attrs = context['widget']['attrs']
input_type = final_attrs.pop('type', None)
id_ = final_attrs.get('id') id_ = final_attrs.get('id')
subwidgets = [] subwidgets = []
for i, widget in enumerate(self.widgets): for i, widget in enumerate(self.widgets):
if input_type is not None:
widget.input_type = input_type
widget_name = '%s_%s' % (name, i) widget_name = '%s_%s' % (name, i)
try: try:
widget_value = value[i] widget_value = value[i]

View File

@ -118,6 +118,19 @@ class MultiWidgetTest(WidgetTest):
'<input id="bar_1" type="text" class="small" value="lennon" name="name_1" />' '<input id="bar_1" type="text" class="small" value="lennon" name="name_1" />'
)) ))
def test_constructor_attrs_with_type(self):
attrs = {'type': 'number'}
widget = MyMultiWidget(widgets=(TextInput, TextInput()), attrs=attrs)
self.check_html(widget, 'code', ['1', '2'], html=(
'<input type="number" value="1" name="code_0" />'
'<input type="number" value="2" name="code_1" />'
))
widget = MyMultiWidget(widgets=(TextInput(attrs), TextInput(attrs)), attrs={'class': 'bar'})
self.check_html(widget, 'code', ['1', '2'], html=(
'<input type="number" value="1" name="code_0" class="bar" />'
'<input type="number" value="2" name="code_1" class="bar" />'
))
def test_value_omitted_from_data(self): def test_value_omitted_from_data(self):
widget = MyMultiWidget(widgets=(TextInput(), TextInput())) widget = MyMultiWidget(widgets=(TextInput(), TextInput()))
self.assertIs(widget.value_omitted_from_data({}, {}, 'field'), True) self.assertIs(widget.value_omitted_from_data({}, {}, 'field'), True)