Избегайте бронирования прошлых дат с помощью django
Я создал систему бронирования встреч, однако я хочу избежать того, чтобы любые прошлые даты были забронированы до того, как они достигнут создания объекта бронирования, который затем сохраняется в базе данных.
Вот мой views.py
class BookingView(View):
def get(self, request, *args, **kwargs):
return render(request, "availability.html")
def post(self, request, *args, **kwargs):
form = AvailabilityForm(request.POST)
if form.is_valid():
data = form. cleaned_data
bookingList = Appointment.objects.filter(start__lt=data['end_time'], end__gt=data['start_time'])
if not bookingList:
booking = Appointment.objects.create(
name=data["name"],
email=data["email"],
start=data["start_time"],
end=data["end_time"]
)
booking.save()
name_user = data["name"]
start_time = data["start_time"]
end_time = data["end_time"]
email_user = data["email"]
send_mail("Virtual PT Session", f"Thanks {name_user} For Booking Your Appointment with us.\n" +
f"Please join the following zoom link on {start_time} \n" +
" https://us04web.zoom.us/j/8339571591?pwd=dG9MQy9nUWN6a0F2dUo4L04rQkxPQT09",
"engage.fitness.training.1@gmail.com", [email_user], fail_silently=True)
return render(request, "success.html", {
"booking":booking
},)
else:
name = data["name"]
return render(request, "booked.html",{
"name":name,
},)
Вы можете добавить дополнительную проверку для полей даты следующим образом:
from django.utils import timezone
class AvailabilityForm(forms.Form):
# ... the fields
def clean_start_time(self)
start = self.cleaned_data.get('start_time')
if start < timezone.now():
raise forms.ValidationError('the date must be after now.')
return data
Подробнее на https://docs.djangoproject.com/en/4.0/ref/forms/validation/#cleaning-a-specific-field-attribute
Далее, вам нужно немного переписать ваше представление и отправить форму в шаблон, чтобы отобразить эти ошибки, как объясняется в этой документации: