Больше, чем простая проверка формы с помощью 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})