2712: Add class is-danger to fields with errors

This commit is contained in:
Ulrich K 2023-05-09 12:23:33 +02:00
parent 7211906697
commit f9126a124e

View file

@ -1,5 +1,6 @@
""" Overrides django's default form class """ """ Overrides django's default form class """
from collections import defaultdict from collections import defaultdict
from django.core.exceptions import ValidationError
from django.forms import ModelForm from django.forms import ModelForm
from django.forms.widgets import Textarea from django.forms.widgets import Textarea
@ -34,3 +35,43 @@ class CustomForm(StyledForm):
"""Save and check perms""" """Save and check perms"""
self.instance.raise_not_editable(request.user) self.instance.raise_not_editable(request.user)
return super().save(*args, **kwargs) return super().save(*args, **kwargs)
# def clean(self):
# self.cleaned_data = super().clean()
# print("Clean")
# print(self.errors)
# for name, field in self.fields.items():
# if self.has_error(field):
# print(field.widget.__dir__())
# self.add_to_attributes(field, "class", "is-danger")
# return self.cleaned_data
def add_error(self, field, error):
super().add_error(field, error)
# TODO this (finding the field) is much too complicated; probably this is not the right location?
# it is however more or less what super().add_error does...
if (field is None):
if isinstance(error, dict):
for field_name, messages in error.items():
if field_name in self.fields:
self.add_to_attributes(self.fields[field_name], "class", "is-danger")
elif isinstance(error, ValidationError):
if hasattr(error, 'error_dict'):
error = error.error_dict
for field_name, error_list in error.items():
if field_name in self.fields:
self.add_to_attributes(self.fields[field_name], "class", "is-danger")
else:
self.add_to_attributes(field, "class", "is-danger")
# TODO this method looks much too complicated for a simple "field.add_class(class)"?
def add_to_attributes(self, field, attr_name, value):
current_attributes = field.widget.attrs
current_classes = set(current_attributes.get(attr_name, "").split())
current_classes.add(value)
current_attributes[attr_name] = " ".join(current_classes)