Python Django:如何获取模型继承自的模型?

Python Django:如何获取模型继承自的模型?,python,django,Python,Django,可能重复: 我有一个: class Animal(models.Model): pass class Cat(Aminal): pass class StreetCat(Cat): pass 如何找到模型继承自的模型?您可以通过\uuuuuu base\uuuu获得python中的直接超类 >>> StreetCat.__base__ is Cat >>> True 如果您有多个基类,那么\uuuuuuuu base\uuuu

可能重复:

我有一个:

class Animal(models.Model):
    pass

class Cat(Aminal):
    pass

class StreetCat(Cat):
    pass

如何找到模型继承自的模型?

您可以通过
\uuuuuu base\uuuu
获得python中的直接超类

>>> StreetCat.__base__ is Cat
>>> True
如果您有多个基类,那么
\uuuuuuuu base\uuuuuuu
将获得所有父类的元组
类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

奇怪的是,我看到get_parent_list()带有dir()并对其进行了测试,但只返回直接的子级。你是说直接的父级?真奇怪!听起来这个方法的全部目的是为了得到所有的祖先。Docstring:“将此模型的所有祖先的列表作为列表返回。用于确定某个对象是否是祖先,而不考虑血统。”“啊,似乎忽略了抽象模型。啊,好的一点,因为父对象是将每个继承的模型表连接在一起的一对一字段的排序dict。我喜欢mro hack!一个完整整洁的列表,正如人们所期望的。这里有django特定的元素。这是不重复的