Django:我如何获得模型继承的模型?

时间:2011-03-11 21:01:48

标签: python django

  

可能重复:
  get python class parent(s)

我有一个:

class Animal(models.Model):
    pass

class Cat(Aminal):
    pass

class StreetCat(Cat):
    pass

如何找出模型继承的模型?

1 个答案:

答案 0 :(得分:8)

您可以通过__base__

在python中获取直接超类
>>> StreetCat.__base__ is Cat
>>> True
如果您有多个基类__bases__

class Foo(A, B)将为您提供所有父类的元组


感谢OP更新:以下django方法不检索抽象基类,因为从技术上讲,这些是用于存储将每个继承模型绑定到其父项的外键的内部使用方法。请注意!

Django还间接为继承模型提供了一些帮助,这些模型是遍历超类的纯python方法的快捷方式。

>>> StreetCat._meta.get_parent_list() 
[Out] : Set([Class Animal, Class Cat])

InheritedClass.parents是所有父母的有序字典,因此如果您愿意,以下内容可以帮助获得最高父母:

>>> StreetCat._meta.parents.keys()[-1]

你也可以使用非django相关的方法,比如

>>> StreetCat.__mro__[-3] 
# once you know that BaseModel is an Object, and since all defined models subclass 
# the BaseModel, [-3] is the first class that subclasses models.Model