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 """
from collections import defaultdict
from django.core.exceptions import ValidationError
from django.forms import ModelForm
from django.forms.widgets import Textarea
@ -34,3 +35,43 @@ class CustomForm(StyledForm):
"""Save and check perms"""
self.instance.raise_not_editable(request.user)
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)