方法get_models()不返回抽象模型类。
有没有办法获取应用程序的所有模型类(包括抽象模型)?
最佳答案
我们可以实现自己的方法,该方法基本上沿着类层次结构向下走,并“收获”具有给定 app_label
的所有模型:
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
向下移动,每次计算代
中Model
类的下一个代。由于世代数量是有限的,我们知道我们最终会停止。
同时,在每一代中,我们都会通过检查 c._meta.app_label
是否与给定应用程序的模型相同来“收获”属于给定应用程序的模型。给定app_label
。
对于 get_app_models('someapp')
,它返回一个没有特定顺序的列表,其中包含属于 someapp
的所有模型。
关于Django:获取应用程序的所有模型(包括抽象),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50742084/