Как я могу применить общий валидатор ко всем текстовым вводам в моей форме 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)    
Вернуться на верх