Django ValidationError, формирующийся в цикле For - PullRequest
0 голосов
/ 11 мая 2018

Я написал серию определений RegexValidator, которые я вызываю на входах модели django. Вот пример:

def fein_validator(value):
    err = None
    for validator in FEIN_VALIDATOR:
        try:
            validator(value)
            return value
        except ValidationError as exc:
            err = exc
    raise err

Для справки FEIN_VALIDATOR для этого метода ниже. Обратите внимание, что в этом примере есть только один элемент, у меня есть другие валидаторы, которые имеют несколько элементов (отсюда for loop):

FEIN_VALIDATOR = [
    RegexValidator(r'^\d{2}-\d{7}$')
    ]

Метод работает отлично и выдает ошибку, когда он должен. Но выдается ошибка Enter a valid value., и я хотел бы настроить возврат более конкретно.

Я пробовал версии этого и этого . Но все это предполагает, что есть только один проход. Я пытаюсь запустить серию валидаторов, используя for loop.

Вопрос 1: работает ли для этого конструкция метода, которую я использую, или для каждой проверки должен быть отдельный метод? [посредством чего я могу добавить пользовательские сообщения.]

Вопрос 2: если это работает, как мне изменить сообщение об ошибке на пользовательское сообщение?

1 Ответ

0 голосов
/ 11 мая 2018

РЕДАКТИРОВАТЬ 1: Добавлен комментарий

Да, ваш метод работает отлично.

РЕДАКТИРОВАТЬ 2: Добавлена ​​ссылка на пользовательское сообщение об ошибке модели

пользовательские сообщения об ошибках с формой модели

  def fein_validator(value):
        err = None
        for validator in FEIN_VALIDATOR:
            try:
                validator(value)
                return value
            except ValidationError:
                raise ValidationError({'field_name': ["error message",]})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...