Использование Django валидаторов в пустом поле - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть модель с полем:

last_watched_episode = models.PositiveSmallIntegerField(
    null=True,
)


И в этом поле я хочу сохранить нулевые или положительные целые числа от gte 1 до максимального значения, которое может содержать PositiveSmallIntegerField (от 1 до 32767) .

Я хочу применить проверку на уровне модели, чтобы я включил full_clean () для save ():

def save(self, force_insert=False, force_update=False, using=None,
         update_fields=None):
    self.full_clean()
    super(SeasonModel, self).save(
        force_insert=False, force_update=False, using=None, update_fields=None
    )


Проблема в том, что я применяю MinValueValidator или пользовательский валидатор к этому В поле я получаю следующее сообщение об ошибке:

django.core.exceptions.ValidationError: {'last_watched_episode': ['This field cannot be blank.']}

каждый раз, когда сохраненное значение опущено, то есть НЕТ. Это вполне логично, так как валидатору нужно иметь какое-то входное значение для его проверки

Валидатор, который я использую:

def skip_if_none_none_zero_positive_validator(value: int) -> None:

    if value is None:
        return None
    elif value < 1:
        raise ValidationError(
            f'{value} must be greater or equal 1'
        )

Вопрос в том, как решить эту проблему? Как сохранить None как значение le git и одновременно проверить, что оно будет большим или равным 1, если значения не None? И, конечно, проводить проверку на уровне модели.

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