我有一些模特:
class Place(models.Model):
name = models.CharField(unique=True)
class Bar(Place):
drinks = models.ManyToManyField('Drink')
class Restaurant(Place):
meals = models.ManyToManyField('Meals')
这是一个多表继承结构,每个酒吧仅供应饮品,每个餐厅仅供应餐点。但是,我需要在每个地方都有一个独特的名称 - 因此是父Place
模型。
现在,多表继承假设父级和子级是独立的实体。这意味着当我想创建一个新的Bar
时,我应该这样:
>> parent = Place(name='Myplace')
>> parent.save()
>> child = Bar(place=parent, drinks=mydrinklist)
>> child.save()
但就我而言,Place
不是一个单独的实体:它本身不应该存在。它只是一个有一些限制的共享存储。我想要这样的东西:
>> child = Bar(name='Myplace', drinks=mydrinklist)
>> child.save()
其中name
属性自动传递给基础父模型,并且在调用Place
时静默创建save()
模型。 SQLAlchemy可以通过其多表继承来实现。有没有办法在Django中实现相同的目标?
答案 0 :(得分:3)
Django的abstract base classes解决了在模型之间共享公共字段的问题:
class Place(models.Model):
name = models.CharField(unique=True)
class Meta:
abstract = True
编辑:尽管如此,正如Daniel在评论中提到的那样,您提出的解决方案应该可以正常运行。这里有更多关于Django's multi-table inheritance
的信息答案 1 :(得分:0)
丹尼尔罗斯曼提到,我完全错了:Django确实以我描述的方式工作。