亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從父類獲取所有子模型 - 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 關注
  • 217 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號