roc*_*erd 2 python django inheritance
我有一些模型:
class Place(models.Model):
name = models.CharField(unique=True)
class Bar(Place):
drinks = models.ManyToManyField('Drink')
class Restaurant(Place):
meals = models.ManyToManyField('Meals')
Run Code Online (Sandbox Code Playgroud)
那是一个多桌继承结构,每个酒吧只提供饮料,每个餐厅只提供餐点。但是,我需要每个地方的名称在所有地方都是唯一的 - 因此是父Place模型。
现在,多表继承假定父项和子项是独立的实体。这意味着当我想创建一个 new 时Bar,我应该像这样:
>> parent = Place(name='Myplace')
>> parent.save()
>> child = Bar(place=parent, drinks=mydrinklist)
>> child.save()
Run Code Online (Sandbox Code Playgroud)
但就我而言,Place它不是一个单独的实体:它不应该单独存在。它只是一个有一些限制的共享存储。我想要这样的东西:
>> child = Bar(name='Myplace', drinks=mydrinklist)
>> child.save()
Run Code Online (Sandbox Code Playgroud)
其中name属性自动传递给底层父模型,并Place在save()调用时静默创建模型。SQLAlchemy 可以通过它的多表继承来做到这一点。有没有办法在 Django 中实现相同的目标?
Django 的抽象基类解决了模型之间共享公共字段的问题:
class Place(models.Model):
name = models.CharField(unique=True)
class Meta:
abstract = True
Run Code Online (Sandbox Code Playgroud)
编辑:话虽如此,正如丹尼尔在评论中提到的,您提出的解决方案应该可以正常工作。这里有更多关于Django 的多表继承