Возможно, вы захотите иметь промежуточный объект, например, Booking
, это всегда один рейс и один путешественник. Таким образом, нет никакой путаницы в отношении того, какой путешественник на каком рейсе, что кажется довольно важным отличием, если только по какой-то причине это не имеет отношения к вашему варианту использования.
Примеры моделей для этого случая:
from django.db import models
class Traveler(models.Model):
name = models.TextField()
def __str__(self):
return self.name
class Flight(models.Model):
number = models.TextField()
def __str__(self):
return self.number
class Itinerary(models.Model):
pass
class Booking(models.Model):
itinerary = models.ForeignKey(
Itinerary,
related_name='bookings',
on_delete=models.CASCADE,
)
traveler = models.ForeignKey(
Traveler,
related_name='bookings',
on_delete=models.CASCADE,
)
flight = models.ForeignKey(
Flight,
related_name='bookings',
on_delete=models.CASCADE,
)
Частичный вывод из теста ниже. Обратите внимание, что это создает два отдельных маршрута с независимыми бронированиями на один и тот же рейс.
>>> from itineraries.models import Traveler, Flight, Itinerary, Booking
>>>
>>> f = Flight.objects.create(number='JAL1')
>>>
>>> Booking.objects.create(
... itinerary=Itinerary.objects.create(),
... traveler=Traveler.objects.create(name='kungphu'),
... flight=f,
... )
<Booking: Booking object (5)>
>>>
>>> Booking.objects.create(
... itinerary=Itinerary.objects.create(),
... traveler=Traveler.objects.create(name='Cyzanfar'),
... flight=f,
... )
<Booking: Booking object (6)>
>>>
>>> # Travelers on flight f:
>>> for t in Traveler.objects.filter(bookings__flight=f):
... print(t)
...
kungphu
Cyzanfar