Привет всем, я новичок в django, строю систему бронирования ложи с django3.0, и я не могу заставить свою модель сформировать правильный набор запросов для получения данных в моей модели резервирований, я продолжаю получать NameError сообщение об ошибке каждый раз, когда я пытаюсь ввести новую дату через мой взгляд, и сейчас я не совсем уверен, как правильно решить эту ошибку
вот мои models.py:
from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User
now = timezone.now
end = timezone.now() + timezone.timedelta(days=2)
room_choices = [
('single_room', 'Single Room'),
('double_room', 'Double Room'),
('executive_room', 'Executive Room'),
]
class Reservation(models.Model):
room_type = models.CharField(max_length=30, choices=room_choices, default=room_choices[1])
check_in = models.DateField(default=timezone.now)
check_out = models.DateField(default=end)
class Meta:
verbose_name = 'Reservation'
verbose_name_plural = 'Reservations'
Я хотел бы добавить утверждения проверки позже в views.py для цены и количества комнат в зависимости от типа комнаты, выбранного пользователем, поэтому игнорируйте поле на данный момент
вот мой forms.py :
from django import forms
from .models import Reservation
class AvailabilityForm(forms.ModelForm):
class Meta:
model = Reservation
fields = [
"room_type",
"check_in",
"check_out",
]
widgets = {
'check_in': forms.DateInput(format='%m/%d/%Y'),
'check_out': forms.DateInput(format='%m/%d/%Y'),
}
Если кто-то знает, как заставить виджеты работать должным образом вне администратора, отображая календарь cclick, а не просто поле char с полем даты внутри, пожалуйста, также помогите мне решить эту проблему а также
вот мой views.py:
from django.shortcuts import get_object_or_404, render
from datetime import timedelta, date
from django.contrib.auth.models import User
from django.contrib import messages
from . import forms
from .models import Reservation
def availability(request):
form = forms.AvailabilityForm()
reservation = Reservation
if request.method == 'POST':
form = forms.AvailabilityForm(request.POST or None)
if form.is_valid:
reserve = form.save(commit=False)
reserve.reservation = reservation
# check whether the dates are valid
# case 1: a room is booked before the check_in date, and checks out after the requested check_in date
case_1 = Reservation.objects.filter(check_in__lte=reserve.check_in).filter(check_out__gte=check_in)
# case 2: oom is booked before the requested check_out date and check_out date is after requested check_out date
case_2 = Reservation.objects.filter(check_in__lte=check_out, check_out__gte=check_out).exists()
#case3: room is booked in a date which lies between the two requested check-in/check-out dates
case_3 = Reservation.objects.filter(check_in__gte=check_in, check_out__lte=check_out).exists()
# if either of these is true, abort and render the error
if case_1 or case_2 or case_3:
return render(request, "availability.html", {"errors": "This room is not available on your selected dates", "form": form})
# else dates are valid
reserve.save()
messages.add_message(request, messages.SUCCESS, 'Room is available for your stay here')
return redirect("/complete_booking")
return render(request, "availability.html", {"form": form})
я пробовал разные методы, чтобы попытаться получить мое представление для проверки check_in и d Объекты check_out, как вы можете видеть, case1 и case2 используют разные методы фильтрации, но ни один из них, похоже, не работает, будет полезна любая помощь относительно того, где я ошибаюсь и как это исправить