Удивлен, что существует так много различных ответов, я думаю, люди имеют свои собственные предпочтения , Это, как я хотел бы сделать это:
class Airport(models.Model):
name = models.CharField(max_length=200)
class Airline(models.Model):
name = models.CharField(max_length=200)
terminals = models.ManyToManyField('Terminal', related_name='airlines')
class Terminal(models.Model):
name = models.CharField(max_length=200)
airport = models.ForeignKey('Airport', related_name='terminals')
Это позволяет и предполагает следующие условия:
- Авиакомпания может присутствовать в одном или более терминалов в данном аэропорту
- A терминал может иметь больше одного или нескольких авиакомпаний
- терминал может существовать только в одном из аэропорта
Обратите внимание, что в этой настройке аэропорты и авиакомпании всегда связаны косвенно через терминалы. Я думаю, что это особенность, а не ошибка, лично. В аэропортах всегда есть как минимум один терминал, даже если терминал - это весь аэропорт.
Или
Вы можете рассмотреть его несколько более правильно, с логической точки зрения, для создания модели, как так:
class Airport(models.Model):
name = models.CharField(max_length=200)
class Airline(models.Model):
name = models.CharField(max_length=200)
class Terminal(models.Model):
name = models.CharField(max_length=200)
airport = models.ForeignKey('Airport', related_name='terminals')
airlines = models.ManyToManyField('Airline', related_name='terminals')
В практическом плане данные будут вести себя в основном то же самое , Однако можно было бы аргументировать, что думать о терминале, имеющем «Авиалинии», имеет больше смысла концептуально, чем у данной авиакомпании, имеющей терминалы. В конце концов, авиакомпания не содержит терминалов, но каждый терминал содержит эти авиакомпании.