モデル継承を使用する場合、django-model オブジェクトの実際のクラスを見つけようとしています。
問題を説明するコード:
class Base(models.model):
def basemethod(self):
...
class Child_1(Base):
pass
class Child_2(Base):
pass
2 つの Child クラスのさまざまなオブジェクトを作成し、それらすべてを含むクエリセットを作成すると、次のようになります。
Child_1().save()
Child_2().save()
(o1, o2) = Base.objects.all()
オブジェクトが basemethod で 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
しかし、それはもろく感じられ、さらに多くのレベルで継承するとどうなるかわかりません.