Skip to content

Commit b5b8893

Browse files
author
R. Kaleta
committed
Handle classes for subwidgets in MultiWiget
1 parent 186b43d commit b5b8893

File tree

1 file changed

+33
-7
lines changed

1 file changed

+33
-7
lines changed

materializecssform/templatetags/materializecss.py

Lines changed: 33 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -39,15 +39,25 @@ def materializecss(element, options={}):
3939
return render(element, markup_classes)
4040

4141

42+
def _add_input_classes_widget(widget, errors):
43+
if not _is_checkbox_widget(widget) and not _is_multiple_checkbox_widget(widget) \
44+
and not _is_radio_widget(widget) and not _is_file_widget(widget):
45+
classes = widget.attrs.get('class', '')
46+
if config.MATERIALIZECSS_VALIDATION:
47+
classes += ' validate'
48+
if errors:
49+
classes += ' invalid'
50+
widget.attrs['class'] = classes
51+
52+
4253
def add_input_classes(field):
4354
if not is_checkbox(field) and not is_multiple_checkbox(field) and not is_radio(field) \
4455
and not is_file(field):
45-
field_classes = field.field.widget.attrs.get('class', '')
46-
if config.MATERIALIZECSS_VALIDATION:
47-
field_classes += ' validate'
48-
if field.errors:
49-
field_classes += ' invalid'
50-
field.field.widget.attrs['class'] = field_classes
56+
if has_multi_widget(field):
57+
for widget in field.field.widget.widgets:
58+
_add_input_classes_widget(widget, field.errors)
59+
else:
60+
_add_input_classes_widget(field.field.widget, field.errors)
5161

5262

5363
def render(element, markup_classes):
@@ -79,6 +89,22 @@ def render(element, markup_classes):
7989
return template.render(context)
8090

8191

92+
def _is_checkbox_widget(widget):
93+
return isinstance(widget, forms.CheckboxInput)
94+
95+
96+
def _is_multiple_checkbox_widget(widget):
97+
return isinstance(widget, forms.CheckboxSelectMultiple)
98+
99+
100+
def _is_radio_widget(widget):
101+
return isinstance(widget, forms.RadioSelect)
102+
103+
104+
def _is_file_widget(widget):
105+
return isinstance(widget, forms.FileInput)
106+
107+
82108
@register.filter
83109
def is_checkbox(field):
84110
return isinstance(field.field.widget, forms.CheckboxInput)
@@ -125,5 +151,5 @@ def is_select_multiple(field):
125151

126152

127153
@register.filter
128-
def is_multi_widget(field):
154+
def has_multi_widget(field):
129155
return isinstance(field.field.widget, forms.MultiWidget)

0 commit comments

Comments
 (0)