Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django模型继承:使用现有的超类创建子类_Django_Inheritance_Model - Fatal编程技术网

Django模型继承:使用现有的超类创建子类

Django模型继承:使用现有的超类创建子类,django,inheritance,model,Django,Inheritance,Model,我正在使用,想知道如何从超类的实例创建继承的类型 使用文档中给出的示例: 上课地点(models.Model): name=models.CharField(最大长度=50) 地址=models.CharField(最大长度=80) 高级餐厅(地点): 供应热狗=models.BooleanField() serves_pizza=models.BooleanField() 现在,当您创建一个餐厅时,您会自动创建一个场所,这很好,而且是我期望和想要的行为 但是如果我做了一个地方,然后决定转换成

我正在使用,想知道如何从超类的实例创建继承的类型

使用文档中给出的示例:

上课地点(models.Model):
name=models.CharField(最大长度=50)
地址=models.CharField(最大长度=80)
高级餐厅(地点):
供应热狗=models.BooleanField()
serves_pizza=models.BooleanField()
现在,当您创建一个
餐厅
时,您会自动创建一个
场所
,这很好,而且是我期望和想要的行为


但是如果我做了一个
地方
,然后决定转换成一种特定类型(比如
餐厅
)。如何使用现有的
位置创建一个
餐厅

多表继承只是
位置和餐厅之间的OneToOneField
关系

place = Place.objects.get(id=1)               

# Create a restaurant using existing Place   
restaurant = Resturant(place_ptr=place)
restaurant.save()

这将导致restaurant.name被清空。因为restaurant.save()将更新名称为“”的位置(因为restaurant=restaurant())。。。一定有更好的方法…你应该添加餐厅。更新(地点),看。好的,secator的答案和jpic的添加相结合就可以了…可能是我看到的问题和答案的重复,但我很困惑,因为我认为这个问题与身份验证有关(因为用户更像是一个特殊的对象)然而,我对你的重复评论投了更高的票……所指的问题是关于用户的,这可能会让人困惑。我发现这个地方和餐馆的例子(从Django文档中偷来)更清楚,更像我的问题……但基本上是相同的问题。请参阅
place = Place.objects.get(id=1)

# Create a restaurant using existing Place
place.__class__ = Restaurant
place.save()
restaurant = place