Django:如何获取模型的父模型?

7 投票
1 回答
3868 浏览
提问于 2025-04-16 13:32

可能重复的问题:
获取Python类的父类

我有一个:

class Animal(models.Model):
    pass

class Cat(Aminal):
    pass

class StreetCat(Cat):
    pass

我怎么才能知道一个模型是从哪个模型继承的呢?

1 个回答

10

在Python中,你可以通过 __base__ 来获取直接的父类。

>>> StreetCat.__base__ is Cat
>>> True

如果你有多个父类,比如 class Foo(A, B),那么 __bases__ 会给你一个包含所有父类的元组。


更新说明:根据提问者的反馈,以下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

撰写回答