【发布时间】:2011-03-11 21:01:48
【问题描述】:
我有一个:
class Animal(models.Model):
pass
class Cat(Aminal):
pass
class StreetCat(Cat):
pass
如何找出模型继承自的模型?
【问题讨论】:
-
这里有django特有的元素。
-
这不是重复的
我有一个:
class Animal(models.Model):
pass
class Cat(Aminal):
pass
class StreetCat(Cat):
pass
如何找出模型继承自的模型?
【问题讨论】:
可以通过__base__获取python中的直接超类
>>> StreetCat.__base__ is Cat
>>> True
如果您有多个基类class Foo(A, B),__bases__ 将为您提供所有父类的元组
感谢 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
【讨论】: