У меня есть модель с полем:
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? И, конечно, проводить проверку на уровне модели.