为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

喵喔喔 2021-07-08 14:08:19
如何从父类中获取所有子模型?作为一个例子,我有:class Device(PolymorphicModel):   .....class Mobile(Device):    .....class Computer(Device):   .....所以我想从 Device 模型中获取它的所有后代:Mobile、Computer 作为类而不是实例。谢谢你。
查看完整描述

1 回答

?
喵喵时光机

TA贡献1846条经验 获得超7个赞

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


>>> 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()包含所有后代(直接和间接)的。


查看完整回答
反对 回复 2021-07-21
  • 1 回答
  • 0 关注
  • 201 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号