Я посмотрел на аналогичный вопрос на SO, но ни один из них не ответил на мою проблему. Например Как вы приводите экземпляр к производному классу? . Но ответ, похоже, не тот, который я хочу.
Вот моя ситуация. У меня есть структура классов, как в Django
class Base:
...some stuff...
class Derived(Base):
...some more stuff...
Теперь, когда я делаю несколько запросов в Django, я всегда получаю объекты базового класса.
baseobj = get_object_or_404(Base, id = sid)
Во время выполнения я также могу столкнуться с «производными» объектами, которые имеют некоторые дополнительные свойства. Я могу выяснить, является ли объект базовым или производным (в объекте базового класса достаточно информации). Но как мне получить доступ к тем дополнительным полям, которые присутствуют только в классе Derived. Я не в состоянии опустить "База" -> "Производная". Как мне справиться с этим?
EDIT:
Я понял проблему. Django хранит «дополнительные свойства» класса Derived в отдельной таблице. Следовательно, проблема возникла из-за этой строки кода.
baseobj = get_object_or_404(Base, id = sid)
baseobj всегда будет иметь базовый класс и не будет иметь никаких свойств класса Derived. Мне нужно сделать дополнительный запрос, чтобы получить объект класса Derived.
baseobj = get_object_or_404(Base, id = sid)
if baseobj.isDerivedType:
derivedobj = get_object_or_404(Derived, id = sid)