Многотабличное наследование в Django: Как присвоить родительский объект дочернему классу
Ссылка на пример из документации Django:
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.create(name='some_place', address='some_address')
Поскольку я уже создал объект родительского класса. Я хочу добавить объект Restaurant, назначенный объекту Place, который я создал выше. Короче говоря, я хочу сделать что-то вроде
r = Restaurant(place=p1, serves_hot_dogs=True, serves_pizza=False)
r.save()
Примечание: В многотабличном наследовании - "parent_link=True". Поэтому приведенный выше код не работает. Хотя он будет прекрасно работать, если мы используем его как отношение один-к-одному без наследования класса Place. Значение:
class Place(models.Model):
name = models.CharField(max_length=50)
address = models.CharField(max_length=80)
def __str__(self):
return "%s the place" % self.name
class Restaurant(models.Model):
place = models.OneToOneField(
Place,
on_delete=models.CASCADE,
primary_key=True,
)
serves_hot_dogs = models.BooleanField(default=False)
serves_pizza = models.BooleanField(default=False)