Как я могу применить общий валидатор ко всем текстовым вводам в моей форме Django?
Я хочу применить белый список специальных символов ко всем пользовательским текстовым вводам без пароля на моем сайте, так что валидация будет провалена, если введен символ, не входящий в белый список. Все мои формы уже наследуются от одного базового класса формы, который сам наследуется от django.forms.BaseForm. Как я могу применить этот валидатор к каждому соответствующему полю на всех формах, которые наследуются от этой формы?
Переопределите метод __init__ на базовом классе формы:
class BaseForm(forms.BaseForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
for field in self.fields.values():
if isinstance(field, forms.CharField) and not isinstance(field.widget, forms.PasswordInput):
field.validators.append(validate_special_characters)
def validate_special_characters(text):
if set(text) - set(CHAR_FIELD_ALLOWED_CHARACTERS):
raise ValidationError(TEXT_ENCODING_ERROR)