Я пытаюсь найти фактический класс объекта модели django при использовании наследования модели.
Некоторый код для описания проблемы:
class Base(models.model):
def basemethod(self):
...
class Child_1(Base):
pass
class Child_2(Base):
pass
Если я создаю различные объекты двух классов Child и создаю набор запросов, содержащий их все:
Child_1().save()
Child_2().save()
(o1, o2) = Base.objects.all()
Я хочу определить, имеет ли объект тип Child_1 или Child_2 в basemethod, я могу перейти к дочернему объекту через o1.child_1 и o2.child_2, но это перехватит знания о дочерних классах в базовом классе.
Я придумал следующий код:
def concrete_instance(self):
instance = None
for subclass in self._meta.get_all_related_objects():
acc_name = subclass.get_accessor_name()
try:
instance = self.__getattribute__(acc_name)
return instance
except Exception, e:
pass
Но он чувствует себя хрупким, и я не уверен, что произойдет, если я наследую больше уровней.