我怎样才能在Django模型中表示这一点?

时间:2010-11-06 08:12:33

标签: python django django-models data-modeling

我无法弄清楚与此有什么关系:

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

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

问题是每个航空公司都根据请求的机场与不同的航站楼相关联,因此终端不能只是静态文本。

任何人都知道对此进行建模的最佳方法是什么?

由于

3 个答案:

答案 0 :(得分: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')

这允许并假设以下条件:

  • 航空公司可以在一个或多个 更多特定机场的航站楼
  • 终端可以有一个或多个 航空公司
  • 终端只能存在于 一个机场

请注意,在此设置中,机场和航空公司始终通过终端间接链接。我个人认为这是一个功能而不是一个bug。机场总是至少有一个航站楼,即使航站楼是整个机场。

或者

从逻辑的角度来看,您可能会认为创建模型更为正确:

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

实际上,数据的表现基本相同。然而,人们可以提出一个论点,即考虑具有“航空公司”的终端在概念上比具有终端的特定航空公司更有意义。毕竟,航空公司不包含终端,但每个终端都包含这些航空公司。

答案 1 :(得分: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)

答案 2 :(得分:0)

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

我认为只用一个类就能解决你的问题