I'm using multi-table-inheritance, and want to know how to create an inherited type from an instance of the superclass.
Using the example given in the documentation:
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()
Now when you create a Restaurant
, you automatically make a Place
, which is fine, and the behaviour I expect and want.
But what if I make a Place
, and later decide I want to convert to a specific type (like Restaurant
). How do you create a Restaurant
, using an existing Place
?
Multi-table inheritance is just OneToOneField
relation between Place and Restaurant.
place = Place.objects.get(id=1)
# Create a restaurant using existing Place
restaurant = Resturant(place_ptr=place)
# this might be needed to not delete the data: restaurant.__dict__.update(place.__dict__)
restaurant.save()