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

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


class Device(PolymorphicModel):

   .....


class Mobile(Device): 

   .....


class Computer(Device):

   .....

所以我想从 Device 模型中获取它的所有后代:Mobile、Computer 作为类而不是实例。


谢谢你。


喵喔喔
浏览 202回答 1
1回答

喵喵时光机

您可以使用[Python-doc]方法获取直接子类:class.__subclasses__()>>> Device.__subclasses__()[<class 'Mobile'>, <class 'Computer'>]然而,这些也可能有子类。我们可以开发一个每次都获得下一代的算法,并一直这样做直到找不到新的子类,例如:def get_descendants(klass):&nbsp; &nbsp; gen = { klass }&nbsp; &nbsp; desc = set()&nbsp; &nbsp; while gen:&nbsp; &nbsp; &nbsp; &nbsp; gen = { skls for kls in gen for skls in kls.__subclasses__() }&nbsp; &nbsp; &nbsp; &nbsp; desc.update(gen)&nbsp; &nbsp; return desc或使用可变数量的参数:def get_descendants(*klass):&nbsp; &nbsp; gen = { *klass }&nbsp; &nbsp; desc = set()&nbsp; &nbsp; while gen:&nbsp; &nbsp; &nbsp; &nbsp; gen = { skls for kls in gen for skls in kls.__subclasses__() }&nbsp; &nbsp; &nbsp; &nbsp; desc.update(gen)&nbsp; &nbsp; return desc这将返回一个set()包含所有后代(直接和间接)的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python