Многотабличное наследование в 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)
Вернуться на верх