Возможен ли полиморфный запрос базовой модели в случае многостолового наследования в 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