Возможен ли полиморфный запрос базовой модели в случае многостолового наследования в Django?

У нас есть

class Place(models.Model):...
class Restaurant(Place):...
class Cafe(Place):...

Я хотел бы запросить Place как-то:

q = Place.objects.all() # how?

но для q[x] я бы не хотел Place экземпляр класса, но Restaurant или же Cafe вместо этого (что на самом деле хранится), так что я буду в состоянии вызывать некоторые полиморфные методы классов моделей. Возможный?

1 ответ

Вы можете получить экземпляры родительского класса, только если поместите свой запрос в родительский класс, но в соответствии с документацией Django о наследовании нескольких таблиц:

Отношения наследования вводят связи между дочерней моделью и каждым из ее родителей (через автоматически созданную OneToOneField).

Поэтому вы можете получить доступ Restaurant а также Cafe случаи через restaurant а также cafe связанные имена:

for place in Place.objects.all():
    try:
        restaurant = place.restaurant
    except Restaurant.DoesNotExist:
        restaurant = None
    try:
        cafe = place.cafe
    except Cafe.DoesNotExist:
        cafe = None
Другие вопросы по тегам