Django реализует подклассы моделей путем добавления (неявного) OneToOneField
к дочерней модели SiameseCat
, которая ссылается на Cat
.
Таким образом, вы можете стремиться получить доступ к SiameseCat
модель с:
for cat in pet_store.cats.all():
try:
siamese_cat = <b>cat.siamesecat</b>
print('siamese_cat')
except SiameseCat.DoesNotExist:
print('simple cat')
Вы можете повысить эффективность этого подхода, используя .select_related('siamesecat')
для загрузки объектов сиамского кота в том же запросе:
for cat in pet_store.cats.<b>select_related('siamesecat')</b>:
try:
siamese_cat = <b>cat.siamesecat</b>
print('siamese_cat')
except SiameseCat.DoesNotExist:
print('simple cat')
Реляционная база данных не хорошо дизайн для подклассов. ORM пытается реализовать это, но часто не очень хорошая идея использовать подклассы, если нет других простых решений для моделирования.