Django:获取应用程序的所有模型(包括摘要)

Django:获取应用程序的所有模型(包括摘要),django,django-models,Django,Django Models,该方法不返回抽象模型类 有没有一种方法可以获取一个应用程序的所有模型类(包括抽象模型)?我们可以实现自己的方法,基本上在类层次结构中向下走,并使用给定的应用程序标签“收获”所有模型 from django.db.models import Model def get_app_models(app_label): result = set() generation = {Model} while generation: generation = {sc f

该方法不返回抽象模型类


有没有一种方法可以获取一个应用程序的所有模型类(包括抽象模型)?

我们可以实现自己的方法,基本上在类层次结构中向下走,并使用给定的
应用程序标签“收获”所有模型

from django.db.models import Model

def get_app_models(app_label):
    result = set()
    generation = {Model}
    while generation:
        generation = {sc for c in generation for sc in c.__subclasses__()}
        result.update([c for c in generation if c._meta.app_label == app_label])
    return list(result)
因此,我们从
Model
向下移动,每次计算
generation
中的下一代
Model
类。因为世代是有限的,我们知道我们最终会停止

同时,在每一代中,我们通过检查
c.\u meta.app\u标签
是否与给定的
app\u标签
相同来“收获”属于给定应用程序的模型

对于
get\u app\u models('someapp')
,它返回一个没有特定顺序的列表,其中包含属于
someapp
的所有模型