|
@@ -4,6 +4,8 @@ import re
|
|
|
import yaml
|
|
import yaml
|
|
|
from django import forms
|
|
from django import forms
|
|
|
|
|
|
|
|
|
|
+from .widgets import APISelect, APISelectMultiple, StaticSelect2
|
|
|
|
|
+
|
|
|
|
|
|
|
|
__all__ = (
|
|
__all__ = (
|
|
|
'BootstrapMixin',
|
|
'BootstrapMixin',
|
|
@@ -28,18 +30,28 @@ class BootstrapMixin(forms.BaseForm):
|
|
|
forms.CheckboxInput,
|
|
forms.CheckboxInput,
|
|
|
forms.ClearableFileInput,
|
|
forms.ClearableFileInput,
|
|
|
forms.FileInput,
|
|
forms.FileInput,
|
|
|
- forms.RadioSelect
|
|
|
|
|
|
|
+ forms.RadioSelect,
|
|
|
|
|
+ APISelect,
|
|
|
|
|
+ APISelectMultiple,
|
|
|
|
|
+ StaticSelect2,
|
|
|
]
|
|
]
|
|
|
|
|
|
|
|
for field_name, field in self.fields.items():
|
|
for field_name, field in self.fields.items():
|
|
|
|
|
+
|
|
|
if field.widget.__class__ not in exempt_widgets:
|
|
if field.widget.__class__ not in exempt_widgets:
|
|
|
css = field.widget.attrs.get('class', '')
|
|
css = field.widget.attrs.get('class', '')
|
|
|
field.widget.attrs['class'] = ' '.join([css, 'form-control']).strip()
|
|
field.widget.attrs['class'] = ' '.join([css, 'form-control']).strip()
|
|
|
|
|
+
|
|
|
if field.required and not isinstance(field.widget, forms.FileInput):
|
|
if field.required and not isinstance(field.widget, forms.FileInput):
|
|
|
field.widget.attrs['required'] = 'required'
|
|
field.widget.attrs['required'] = 'required'
|
|
|
- if 'placeholder' not in field.widget.attrs:
|
|
|
|
|
|
|
+
|
|
|
|
|
+ if 'placeholder' not in field.widget.attrs and field.label is not None:
|
|
|
field.widget.attrs['placeholder'] = field.label
|
|
field.widget.attrs['placeholder'] = field.label
|
|
|
|
|
|
|
|
|
|
+ if field.widget.__class__ == forms.CheckboxInput:
|
|
|
|
|
+ css = field.widget.attrs.get('class', '')
|
|
|
|
|
+ field.widget.attrs['class'] = ' '.join((css, 'form-check-input')).strip()
|
|
|
|
|
+
|
|
|
|
|
|
|
|
class ReturnURLForm(forms.Form):
|
|
class ReturnURLForm(forms.Form):
|
|
|
"""
|
|
"""
|