08 августа 2023 Python Django Form Validator custom
Если необходимо выделить поле формы содержащее ошибку то необходимо переопредить форму так
class FeedbackForm(forms.Form):
name = forms.CharField(label="Имя", max_length=50)
email = forms.EmailField(label="E-mail", max_length=50)
phone = forms.CharField(label="Телефон", max_length=20)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
for visible in self.visible_fields():
if visible.errors: # при наличии ошибки поля, добавляем css-класс и меняем title
visible.field.widget.attrs["class"] = "form__input has-error"
visible.field.widget.attrs["title"] = "".join(visible.errors)
else:
visible.field.widget.attrs["class"] = "form__input"
visible.field.widget.attrs["required"] = True
def clean_email(self):
return check_email(self.cleaned_data["email"]).lower()
def clean_name(self):
return self.cleaned_data["name"].title()
def clean_phone(self):
_phone = self.cleaned_data["phone"]
_phone = "".join(re.findall("([\\d]+)", _phone))
if re.match( "^\\+?[1-9][0-9]{7,14}$", _phone):
return f"+{_phone}"
raise ValidationError("Телефон не соответствует формату")
Конструктор формы позволяет переопредить настройки виджета поля формы, а так же предоставляет список ошибок обрануженных при валидации формы