2010-11-06 2 views
0

У меня возникли проблемы разработки, какие отношения должны быть с этим:Как я могу представить это в модели Django?

class Airport(models.Model): 
    airlines = models.ManyToManyField(Airline) 

class Airline(models.Model): 
    terminal = models.CharField(max_length=200) 

Проблема заключается в том, что каждая авиакомпания связана с другим терминалом в зависимости от аэропорта запрашивается, поэтому терминал не может быть просто статический текст.

Кто-нибудь знает, как лучше всего смоделировать это?

Благодаря

ответ

0
class Airport(models.Model): 
    airlines = models.ManyToManyField(Airline, through=Terminal) 

class Terminal(models.Model): 
    terminal = models.CharField(max_length=200) 

class Airline(models.Model): 
    terminal = models.ForeignKey(Terminal) 
    airport = models.ForeignKey(Airport) 
0

class Airport(models.Model): airlines = models.ManyToManyField(Airline) terminal = models.CharField(max_length=200)

я думаю, что это будет решать ваши проблемы употребления только один класс вместо

3

Удивлен, что существует так много различных ответов, я думаю, люди имеют свои собственные предпочтения , Это, как я хотел бы сделать это:

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') 

В практическом плане данные будут вести себя в основном то же самое , Однако можно было бы аргументировать, что думать о терминале, имеющем «Авиалинии», имеет больше смысла концептуально, чем у данной авиакомпании, имеющей терминалы. В конце концов, авиакомпания не содержит терминалов, но каждый терминал содержит эти авиакомпании.

Смежные вопросы