Избегайте бронирования прошлых дат с помощью 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

Далее, вам нужно немного переписать ваше представление и отправить форму в шаблон, чтобы отобразить эти ошибки, как объясняется в этой документации:

Вернуться на верх