Проверка неверного ввода в django
Как сделать проверку, чтобы при указывании часов бронирования в using_time '0' выходила ошибка и просила повторить указать часы еще раз?
class Reservation(models.Model):
computer_club = models.ForeignKey('clubs.Club', models.CASCADE, related_name='club_reservation', null=True)
seats = models.ForeignKey('clubs.Table', models.CASCADE, related_name='seats_reservation', null=True)
owner = models.ForeignKey('users.User', on_delete=models.CASCADE, related_name='owner_reservation', null=True)
time = models.DateTimeField('Введите время бронирования')
time1 = models.DateTimeField('Время окончания бронирования', blank=True)
using_time = models.PositiveSmallIntegerField('Введите на сколько часов вы садитесь')
class Meta:
verbose_name = 'Бронирование'
verbose_name_plural = 'Бронирование'
def __str__(self):
return f'{self.computer_club } {self.seats } {self.time } {self.using_time } {self.time1 } {self.owner }'
def save(self, *args, **kwargs):
time = self.time
time += timedelta(hours=self.using_time)
self.time1 = time
super(Reservation, self).save()
def reservation(self, *args, **kwargs):
while True:
if self.using_time == 0:
print('Ошибка!')
continue
else:
print('Бронь успешна')
break
reservation(using_time)
Ответы (2 шт):
На уровне моделей, да и на уровне форм можно использовать MinLengthValidator. Просто у поля using_time укажите свойство validators (оно является списком). Ну это будет выглядеть примерно так:
from django.core.validators import MinLengthValidator
class Reservation(models.Model):
...
using_time = models.PositiveSmallIntegerField('Введите на сколько часов вы садитесь',validators=[MinLengthValidator(1,message='Меньше 1 нельзя!')])
Первый аргумент этого класса - это минимально допустимое значение для вашего поля, второй аргумент message - текст ошибки, который выведется, если в поле введут некорректно значение, в вашем случае некорректно значение - числа, которые меньше 1. Еще можно воспользоваться методам clean, опять же у модели и у формы. Или сделать метод clean_using_time. Можете прочитать поподробнее:
using_time = models.PositiveSmallIntegerField('Введите на сколько часов вы садитесь', validators=[MinValueValidator(1,message='Меньше 1 нельзя!'),MaxValueValidator(10,message='Больше 10 нельзя!')])