Как проверить несколько полей в методе очистки модели в Django - PullRequest
0 голосов
/ 10 марта 2020

В моей модели Django я использую метод clean() для проверки двух наборов значений полей. У меня оба условия в одном и том же clean() методе. Однако я считаю, что первое условие проверяется системой, а второе игнорируется.

Вот моя модель и поля:

class Rates(models.Model):
    master_doc = models.ForeignKey(Origin, ...
    exit_rate = models.DecimalField(max_digits=7, decimal_places=2, null=True, blank=True, default=0.00)
    from_date = models.DateField(null=True, verbose_name='From date')
    to_date = models.DateField(null=True, verbose_name='To date')

    def clean(self):
        if self.exit_rate <= 0:
            raise ValidationError({'exit_rate': _('The exit rate must more than 0.')})
        if self.from_date is not None:
            if (self.to_date == self.from_date):
                raise ValidationError({'to_date': _('From Date and end date may not be same.')})

В данном случае ошибка проверки поднимается только для первого т.е. поля exit_rate. Если я поменяю порядок проверки , ошибка проверки возникает только для полей даты, а не для поля курса.

Я попытался это решение и использовал error_dict но с ошибкой 'ValidationError' object has no attribute 'error_list'

Как я могу убедиться, что ошибка проверки возникает в случае, если любое из условий не выполняется?

1 Ответ

1 голос
/ 10 марта 2020

Сначала вам нужно протестировать все условия, а затем вызвать одно исключение, содержащее несколько сообщений. Что-то вроде

    def clean(self):
        errors={}
        if self.exit_rate <= 0:
            errors['exit_rate']= _('The exit rate must more than 0.')
        if self.from_date is not None:
            if (self.to_date == self.from_date):
                errors['to_date'] = _('From Date and end date may not be same.')
        if errors:
            raise ValidationError( errors)

Я не могу сразу найти ссылку на точную форму raise ValidationError( things), чтобы пропустить несколько ошибок. Вышесказанное является предположением, основанным на очевидном расширении оператора рейза в исходном вопросе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...