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

3duebb1j  于 2023-08-08  发布在  Go
关注(0)|答案(1)|浏览(121)

如何从父类中获取所有子模型?例如,我有:

class Device(PolymorphicModel):
   .....

class Mobile(Device): 
   .....

class Computer(Device):
   .....

字符串
所以我想从Device模型中获取它的所有后代:移动的,Computer作为类而不是作为示例。

  • 谢谢-谢谢
kadbb459

kadbb4591#

可以通过**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()

相关问题