从父类获取所有子模型-Django

时间:2018-10-17 11:08:44

标签: python django django-models

如何从家长班获得所有孩子的模特儿? 例如,我有:

package.json

所以我想从Device模型中获取所有后代:移动,计算机作为类而不是实例。

谢谢。

1 个答案:

答案 0 :(得分:4)

您可以使用class.__subclasses__() [Python-doc]方法获取 direct 子类:

>>> Device.__subclasses__()
[<class 'Mobile'>, <class 'Computer'>]

然而,这些也可能具有子类。我们可以开发一种算法,每次获得下一代算法,并一直这样做直到找到新的子类为止,例如:

def get_descendants(klass):
    gen = { klass }
    desc = set()
    while gen:
        gen = { skls for kls in gen for skls in kls.__subclasses__() }
        desc.update(gen)
    return desc

或具有可变数量的参数:

def get_descendants(*klass):
    gen = { *klass }
    desc = set()
    while gen:
        gen = { skls for kls in gen for skls in kls.__subclasses__() }
        desc.update(gen)
    return desc

这将返回包含所有后代(直接和间接)的set()