Больше, чем простая проверка формы с помощью Django [duplicate]

Я изучаю Django с помощью небольшого приложения, позволяющего людям бронировать дома для проживания. У меня есть две модели, описывающие дом и бронирование (в настоящее время я работаю без модели "Клиент"):

# models.py

from django.db import models

class Housing(models.Model):
    name = models.CharField(max_length=255)
    capacity = models.SmallIntegerField()

class Booking(models.Model):
    house = models.ForeignKey(Housing, on_delete=models.CASCADE)
    arrival_date = models.DateField(auto_now_add=False)
    departure_date = models.DateField(auto_now_add=False)
    client_id = models.TextField()
    nb_travellers =  models.SmallIntegerField()

У меня также есть форма ModelForm, соответствующая модели бронирования, в которой клиент может забронировать жилье:

# forms.py

from django.forms import ModelForm
from .models import Booking

class BookingForm(ModelForm):
    """Form to make a booking"""
    class Meta:
        model = Booking
        fields = "__all__"

На мой взгляд, я извлекаю данные формы и хотел бы добавить некоторую проверку перед добавлением нового экземпляра бронирования в базу данных:

  • дата прибытия должна предшествовать дате отправления
  • Количество пассажиров не должно превышать вместимость зала
  • В базе данных не должно быть существующего бронирования, даты которого совпадают с датами нового бронирования

У меня уже есть код для их вычисления, он работает в дополнительных тестовых скриптах, которые я создал, но я изо всех сил пытаюсь правильно интегрировать его в представление. Должен ли я глубже изучить документацию по проверке форм Django? Я что-то читал о методе clean для записи непосредственно в класс ModelForm, но я немного запутался... У кого-нибудь есть какой-нибудь совет или подходящее руководство?

from django.shortcuts import render
from .forms import BookingForm

def booking_form(request):
    if request.method == 'POST':        
        form = BookingForm(request.POST)        
        if form.is_valid():
            form.save()
    else:
        form = BookingForm()

    return render(request, 'home.html', {'form': form})
Вернуться на верх