Подтвердить что ты не робот

Наследование модели Django: создайте подкласс с использованием существующего суперкласса

Я использую 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?

4b9b3361

Ответ 1

Наследование нескольких таблиц - это всего лишь отношение OneToOneField между местом и рестораном.

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

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

Ответ 2

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

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