Для целей демонстрации и упрощения у меня есть модель Резервирование, которая ссылается на несколько Объекты Guest через внешний ключ. Чтобы бронирование было действительным и сохранено, все связанные с ним гости должны быть не моложе 18 лет.
Однако ни одна из этих записей (ни бронирование, ни гости) не была сохранена. сохранено в базе данных еще. Мне нужно выполнить эту проверку эффективно и чисто, желательно таким образом, чтобы логика проверки была отделена от самих моделей.
Как мне подойти к этому сценарию проверки? Каковы наилучшие методы проверки несохраненных связей внешних ключей в Django?
Вот упрощенная версия моей настройки:
Файл: models.py
Код: Выделить всё
from django.db import models
class Reservation(models.Model):
check_in_date = models.DateField()
check_out_date = models.DateField()
def __str__(self):
return f"Reservation from {self.check_in_date} to {self.check_out_date}"
class Guest(models.Model):
name = models.CharField(max_length=255)
age = models.PositiveIntegerField()
reservation = models.ForeignKey(
Reservation,
related_name="guests",
on_delete=models.CASCADE
)
def __str__(self):
return f"{self.name} ({self. Age} years old)"
Код: Выделить всё
from django.core.exceptions import ValidationError
def validate_reservation_and_guests(reservation):
"""
Validate that all guests in the reservation are at least 18 years old.
"""
for guest in reservation.guests.all():
if guest.age < 18:
raise ValidationError("All guests must be at least 18 years old.")
Как лучше всего структурировать такую проверку в администраторе Django? Я открыт для использования пользовательских методов модели, проверки формы или сигналов, но предпочитаю хранить логику в отдельном файле для лучшей организации. Есть ли другие подходы, которые мне следует рассмотреть?
Будем очень признательны за любые примеры или советы!
Подробнее здесь: https://stackoverflow.com/questions/792 ... -in-django