Пользовательский валидатор 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)