Python 将模型转换为其基础模型
考虑以下文件:Python 将模型转换为其基础模型,python,django,inheritance,django-models,Python,Django,Inheritance,Django Models,考虑以下文件: from django.db import models class Place(models.Model): name = models.CharField(max_length=50) address = models.CharField(max_length=80) class Restaurant(Place): serves_hot_dogs = models.BooleanField(default=False) serves_pi
from django.db import models
class Place(models.Model):
name = models.CharField(max_length=50)
address = models.CharField(max_length=80)
class Restaurant(Place):
serves_hot_dogs = models.BooleanField(default=False)
serves_pizza = models.BooleanField(default=False)
现在,让我们假设我有一家餐厅
,名为餐厅
。但是这个地方不再是餐馆了,所以我想把它改造成一个地方。为此,我愿意:
p = Place.objects.get(pk=place_id)
p.restaurant.delete()
p.save()
它工作得很好,p
不再是一家餐厅,但奇怪的事情发生了:Place表中p
的主键(ID)发生了更改,就像删除了位置然后重新创建一样
为什么会这样?
我如何在不改变地点ID的情况下将我的餐馆转换成一个地点?您从
place
继承了restaurant
,并且Django
对DB中两个表之间的这种关系做了一些处理。Django调用了多表继承。
此类设计的一些特点包括:
两个对象的主键相同李>
Django观点中的两个对象似乎是一个对象,因此一个对象的PK
中的每一个更改都会导致另一个对象的自动更改
两个模型之间存在自动创建的OneToOneField
关系李>
这是Django ORM和Django管理这两个对象的
PK
中的更改的正常行为。你可以阅读更多关于这个概念的代码>具体模型< /代码>和<代码>多表继承< /代码>。在哪里<代码> PosithId<代码>来自?@ LISBY从一种形式,认为我有这个地方,我知道它是一家餐馆。