How do I find the "concrete class" of a django model baseclass
Posted
by Mr Shark
on Stack Overflow
See other posts from Stack Overflow
or by Mr Shark
Published on 2008-12-08T11:11:45Z
Indexed on
2010/05/29
19:22 UTC
Read the original article
Hit count: 303
I'm trying to find the actual class of a django-model object, when using model-inheritance.
Some code to describe the problem:
class Base(models.model):
def basemethod(self):
...
class Child_1(Base):
pass
class Child_2(Base):
pass
If I create various objects of the two Child classes and the create a queryset containing them all:
Child_1().save()
Child_2().save()
(o1, o2) = Base.objects.all()
I want to determine if the object is of type Child_1 or Child_2 in basemethod, I can get to the child object via o1.child_1 and o2.child_2 but that reconquers knowledge about the childclasses in the baseclass.
I have come up with the following code:
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
But it feels brittle and I'm not sure of what happens when if I inherit in more levels.
© Stack Overflow or respective owner