Пользовательский валидатор Django с несколькими входами

Я пытаюсь создать пользовательский валидатор, который должен быть способен проверять различные условия, заданные type

def validator(value, type, param):

    match type:
        case 'regex_validator':
            if not re.search(param, value):
                raise ValidationError()
        case 'max_length':
            if value > param:
                raise ValidationError()

и мой вопрос: как я могу передать функции значение формы? Примеры, которые я видел, не передают неявно значение валидатору.

Я хочу объявить поле формы следующим образом:

forms.CharField(validators=[validator(value, x['type'], x['param'] for x in field_validators])

Django не позволяет сделать валидацию нескольких полей с помощью валидаторов полей. Вы должны делать валидацию в форме функции clean_FIELDNAME.

class FormExample():
    field = forms.CharField()

    def clean_field(self, data):
        if XXX:
            validator = RegexValidator()
        elif YYYY:
            validator = MaxLengthValidator()

        validator(data)

Или вы можете создать пользовательское поле с переопределенной функцией validate для выбора валидатора (https://docs.djangoproject.com/en/4.1/ref/forms/validation/#form-field-default-cleaning)

Вернуться на верх