使用模型继承时,我试图找到 django-model 对象的实际类。
一些描述问题的代码:
class Base(models.model):
def basemethod(self):
...
class Child_1(Base):
pass
class Child_2(Base):
pass
如果我创建两个子类的各种对象并创建一个包含它们的查询集:
Child_1().save()
Child_2().save()
(o1, o2) = Base.objects.all()
我想确定对象是基类方法中的 Child_1 还是 Child_2 类型,我可以通过 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
但它感觉很脆弱,我不确定如果我继承更多级别会发生什么。