2010-11-06 51 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') 

這允許並假定以下條件:

  • ,航空公司可以存在於一個或多個 端子
  • 一個給定的機場終端可以有更多的一個或多個 航空公司
  • 終端只能存在於 單個機場

請注意,在此設置中,機場和航空公司始終通過碼頭間接鏈接。我個人認爲這是一個功能,而不是一個錯誤。機場總是至少有一個終端,即使終端是整個機場。

或者

你可能認爲這是稍微正確的,從邏輯上看,以創建模型,像這樣:

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

在實際應用中的數據將表現大致相同。然而,有人可能會提出一個觀點,認爲擁有「航空公司」的終端在概念上比擁有終端的航空公司更有意義。畢竟,航空公司不包含終端,但每個終端都包含這些航空公司。