Как я могу обеспечить соблюдение минимального возрастного ограничения и управлять связанными моделями в Django?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как я могу обеспечить соблюдение минимального возрастного ограничения и управлять связанными моделями в Django?

Сообщение Anonymous »

Я работаю над проектом Django, где мне нужно проверить модель перед ее сохранением на основе значений в связанных с ней моделях. Я столкнулся с этой проблемой при извлечении приложения из проекта с использованием старой версии Django (3.1) в отдельный проект Django 5.1, затем возникла ошибка «ValueError: экземпляр 'Model...'» должен иметь значение первичного ключа до этого. связь может быть использована», созданная для всех классов проверки, которые использовали связанные данные модели.
Для целей демонстрации и упрощения у меня есть модель Резервирование, которая ссылается на несколько Объекты 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)"

Файл: validation.py

Код: Выделить всё

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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»