我有一些模型:
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()
wherename
属性会自动传递给基础父模型,并Place
在save()
调用时以静默方式创建模型。SQLAlchemy可以通过其多表继承来做到这一点。有没有办法在Django中实现相同的目标?
Django的抽象基类解决了在模型之间共享公共字段的问题:
class Place(models.Model):
name = models.CharField(unique=True)
class Meta:
abstract = True
编辑:话虽如此,正如丹尼尔在评论中提到的那样,您建议的解决方案应该可以正常工作。这是有关Django多表继承的更多信息
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句