Python Django:在父模型中存储公共字段
我有一些模型:Python Django:在父模型中存储公共字段,python,django,inheritance,Python,Django,Inheritance,我有一些模型: 上课地点(models.Model): name=models.CharField(unique=True) 班级酒吧(地点): 饮料=型号。ManyToManyField(“饮料”) 高级餐厅(地点): 餐食=型号。ManyToManyField(“餐食”) 这是一个多桌继承结构,每个酒吧只提供饮料,每个餐厅只提供餐食。一、 但是,需要每个地方的名称在所有地方都是唯一的-因此父placemodel 现在,多表继承假定父级和子级是独立的实体。这意味着当我想创建一个新的条时,我应
上课地点(models.Model):
name=models.CharField(unique=True)
班级酒吧(地点):
饮料=型号。ManyToManyField(“饮料”)
高级餐厅(地点):
餐食=型号。ManyToManyField(“餐食”)
这是一个多桌继承结构,每个酒吧只提供饮料,每个餐厅只提供餐食。一、 但是,需要每个地方的名称在所有地方都是唯一的-因此父place
model
现在,多表继承假定父级和子级是独立的实体。这意味着当我想创建一个新的条时,我应该这样做:
>> parent = Place(name='Myplace')
>> parent.save()
>> child = Bar(place=parent, drinks=mydrinklist)
>> child.save()
>> child = Bar(name='Myplace', drinks=mydrinklist)
>> child.save()
但在我的例子中,Place
不是一个单独的实体:它不应该单独存在。它只是一个有一些限制的共享存储。我想要这样的东西:
>> parent = Place(name='Myplace')
>> parent.save()
>> child = Bar(place=parent, drinks=mydrinklist)
>> child.save()
>> child = Bar(name='Myplace', drinks=mydrinklist)
>> child.save()
其中,name
属性自动传递给底层父模型,并且在调用save()
时,将以静默方式创建一个Place
模型。SQLAlchemy可以通过其多表继承实现这一点。在Django中有没有实现相同的方法?Django解决了模型之间共享公共字段的问题:
class Place(models.Model):
name = models.CharField(unique=True)
class Meta:
abstract = True
编辑:正如Daniel在评论中提到的,您提出的解决方案应该可以正常工作。这里有更多关于的内容,但是关于全局唯一的
约束呢?name
现在不是应该分别存储在bar
和restaurant
表中吗?您是否尝试过覆盖位置。save
方法并实现您在那里描述的逻辑?您是否尝试过建议的语法?这正是多表继承在Django中的工作方式,并且您所需的语法在您所展示的模型中正确工作。(事实上,您的第一个版本不起作用,因为parent
不是条形图上的字段。)哇,这确实起作用了。django rest框架中的name
字段出现了一些错误,我认为这与不正确的save
调用有关;看来我错了。谢谢。