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

时间:2012-03-22 12:06:14

标签: django inheritance model

我正在使用multi-table-inheritance,并想知道如何从超类的实例创建一个继承的类型。

使用文档中给出的示例:

class Place(models.Model):
    name = models.CharField(max_length=50)
    address = models.CharField(max_length=80)

class Restaurant(Place):
    serves_hot_dogs = models.BooleanField()
    serves_pizza = models.BooleanField()

现在,当您创建Restaurant时,您会自动生成Place,这很好,以及我期望和想要的行为。

但是,如果我创建Place,然后决定我想转换为特定类型(如Restaurant),该怎么办?如何使用现有的Restaurant创建Place

2 个答案:

答案 0 :(得分:25)

多表继承只是Place和Restaurant之间的OneToOneField关系。

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

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

答案 1 :(得分:10)

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

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