Django:如何获取模型的父模型?
可能重复的问题:
获取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