from django import forms from .widgets import APISelect, APISelectMultiple, ClearableFileInput __all__ = ( 'BootstrapMixin', ) class BootstrapMixin: """ Add the base Bootstrap CSS classes to form elements. """ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) exempt_widgets = [ forms.FileInput, forms.RadioSelect, APISelect, APISelectMultiple, ClearableFileInput, ] for field_name, field in self.fields.items(): css = field.widget.attrs.get('class', '') if field.widget.__class__ in exempt_widgets: continue elif isinstance(field.widget, forms.CheckboxInput): field.widget.attrs['class'] = f'{css} form-check-input' elif isinstance(field.widget, forms.SelectMultiple) and 'size' in field.widget.attrs: # Use native Bootstrap class for multi-line