我开始学习django,已经有一个问题: 如果表有相似的字段,什么样的模型创建更好? 1)标准方式形成官方教程,如
class Place(models.Model):
name = models.CharField(max_length=50)
address = models.CharField(max_length=80)
class Restaurant(models.Model):
name = models.CharField(max_length=50)
address = models.CharField(max_length=80)
serves_hot_dogs = models.BooleanField()
serves_pizza = models.BooleanField()
如您所见,两个模型具有相同的名称和地址字段。我在 https://docs.djangoproject.com/en/1.6/topics/db/models/#multi-table-inheritance 中找到多表继承的工作原理如下: 2)
class Place(models.Model):
name = models.CharField(max_length=50)
address = models.CharField(max_length=80)
class Restaurant(Place):
serves_hot_dogs = models.BooleanField()
serves_pizza = models.BooleanField()
正如文档所说:Place 的所有字段也将在 Restaurant 中可用,尽管数据将驻留在不同的数据库表中。
那么,这两者之间有什么主要区别吗?我应该使用哪一个?
最佳答案
在这种情况下,我认为您应该使用继承(解决方案 2)。
因为Restaurant
是一个特殊的Place
,这意味着Restaurant有字段name
和address
,另外,餐厅有字段 serves_hot_dogs
和 serves_pizza
。
考虑到上述描述,所有解决方案都是合理的。但是,Restaurant
是一个Place
,Restaurant
必须可以被处理为Place
。
在解决方案1中,Restaurant
和Place
是分开的,您不能将Restaurant
处理为Place
。(仅考虑OOP)
在另一边,在解决方案1中,如果我保存一个地址为A的Place
,并添加一个具有相同地址的Restaurant
。我在数据库中保存了两次相同的地址,这导致了冗余和不一致。
这个问题与OOP中的组合和继承的区别类似。
关于python - 具有相同或相似字段的 Django 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23719759/