1
0
mirror of https://github.com/netbox-community/netbox.git synced 2024-05-10 07:54:54 +00:00

Fixes #8058: Display server-side form errors inline with fields

This commit is contained in:
jeremystretch
2022-11-22 12:02:21 -05:00
parent c3dcd8937f
commit f56e3eb784
3 changed files with 75 additions and 147 deletions

View File

@@ -48,10 +48,16 @@ class BootstrapMixin:
]
for field_name, field in self.fields.items():
css = field.widget.attrs.get('class', '')
if field.widget.__class__ not in exempt_widgets:
css = field.widget.attrs.get('class', '')
field.widget.attrs['class'] = ' '.join([css, 'form-control']).strip()
field.widget.attrs['class'] = f'{css} form-control'
elif isinstance(field.widget, forms.CheckboxInput):
field.widget.attrs['class'] = f'{css} form-check-input'
elif isinstance(field.widget, forms.Select):
field.widget.attrs['class'] = f'{css} form-select'
if field.required and not isinstance(field.widget, forms.FileInput):
field.widget.attrs['required'] = 'required'
@@ -59,13 +65,18 @@ class BootstrapMixin:
if 'placeholder' not in field.widget.attrs and field.label is not None:
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()
def is_valid(self):
is_valid = super().is_valid()
if field.widget.__class__ == forms.Select:
css = field.widget.attrs.get('class', '')
field.widget.attrs['class'] = ' '.join((css, 'form-select')).strip()
# Apply is-invalid CSS class to fields with errors
if not is_valid:
for field_name in self.errors:
# Ignore e.g. __all__
if field := self.fields.get(field_name):
css = field.widget.attrs.get('class', '')
field.widget.attrs['class'] = f'{css} is-invalid'
return is_valid
#