Я создаю веб-сайт бронирования, где клиент может записаться на встречу в день по своему выбору, а время встречи выбирается из доступных слотов с помощью раскрывающегося меню.Проблема в том, что если временной интервал уже был кем-то забронирован, он не должен быть доступен и клиенту должно быть показано сообщение об ошибке.
Я написал чистую функцию для выполнения проверки.Выдает следующее сообщение об ошибке: -
No booking on 2019-06-08
Internal Server Error: /
Traceback (most recent call last):
File "/home/gireesh/PycharmProjects/astrobookinenv/lib/python3.6/site-packages/django/core/handlers/exception.py", line 34, in inner
response = get_response(request)
File "/home/gireesh/PycharmProjects/astrobookinenv/lib/python3.6/site-packages/django/core/handlers/base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/home/gireesh/PycharmProjects/astrobookinenv/lib/python3.6/site-packages/django/core/handlers/base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/gireesh/PycharmProjects/astrobookinenv/lib/python3.6/site-packages/django/views/generic/base.py", line 71, in view
return self.dispatch(request, *args, **kwargs)
File "/home/gireesh/PycharmProjects/astrobookinenv/lib/python3.6/site-packages/django/views/generic/base.py", line 97, in dispatch
return handler(request, *args, **kwargs)
File "/home/gireesh/PycharmProjects/astrobookinenv/lib/python3.6/site-packages/django/views/generic/edit.py", line 172, in post
return super().post(request, *args, **kwargs)
File "/home/gireesh/PycharmProjects/astrobookinenv/lib/python3.6/site-packages/django/views/generic/edit.py", line 141, in post
if form.is_valid():
File "/home/gireesh/PycharmProjects/astrobookinenv/lib/python3.6/site-packages/django/forms/forms.py", line 185, in is_valid
return self.is_bound and not self.errors
File "/home/gireesh/PycharmProjects/astrobookinenv/lib/python3.6/site-packages/django/forms/forms.py", line 180, in errors
self.full_clean()
File "/home/gireesh/PycharmProjects/astrobookinenv/lib/python3.6/site-packages/django/forms/forms.py", line 383, in full_clean
self._post_clean()
File "/home/gireesh/PycharmProjects/astrobookinenv/lib/python3.6/site-packages/django/forms/models.py", line 403, in _post_clean
self.instance.full_clean(exclude=exclude, validate_unique=False)
File "/home/gireesh/PycharmProjects/astrobookinenv/lib/python3.6/site-packages/django/db/models/base.py", line 1181, in full_clean
self.clean_fields(exclude=exclude)
File "/home/gireesh/PycharmProjects/astrobookinenv/lib/python3.6/site-packages/django/db/models/base.py", line 1223, in clean_fields
setattr(self, f.attname, f.clean(raw_value, self))
File "/home/gireesh/PycharmProjects/astrobookinenv/lib/python3.6/site-packages/django/db/models/fields/__init__.py", line 629, in clean
value = self.to_python(value)
File "/home/gireesh/PycharmProjects/astrobookinenv/lib/python3.6/site-packages/django/db/models/fields/__init__.py", line 2187, in to_python
parsed = parse_time(value)
File "/home/gireesh/PycharmProjects/astrobookinenv/lib/python3.6/site-packages/django/utils/dateparse.py", line 89, in parse_time
match = time_re.match(value)
TypeError: expected string or bytes-like object
Код функции очистки: -
def clean_booking_time(self):
booked_time = self.cleaned_data['booking_time']
booked_date = self.cleaned_data['booking_date']
# count = Booking.objects.filter(booking_date=booked_date).filter(booking_time=booked_time).count()
count_date = Booking.objects.filter(booking_date=booked_date).count()
if count_date == 0:
print("No booking on ",booked_date)
return self.cleaned_data
else:
count_time = Booking.objects.filter(booking_date=booked_date).filter(booking_time=booked_time).count()
if count_time != 0:
error_message = "%s is not available !" % booked_time
raise ValidationError(error_message)
else:
return self.cleaned_data
Если я назначу встречу, удалив очистку, она успешно сохранится, а затемесли я добавлю код обратно и попытаюсь забронировать в то же время, код работает нормально и выдает ошибку.Похоже, не работает, когда на дату нет бронирования.Возможно, проблема в ORM, который я написал.