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

标签 django django-models

方法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/

相关文章:

django - 如何从 Django Celery 恢复与 Postgres 的连接中断

python - Django - DeleteView中的reverse_lazy产生NoReverseMatch

postgres : enforced by ORM or DB? 上的 Django unique_together

Django rest框架大文件上传

django - Heroku 部署 : ModuleNotFoundError: No module named 'django_summernote'

python - Django 1.6 AbstractUser m2m 模型验证错误

django - 哪个更好: Foreign Keys or Model Inheritance?

python - 如何根据从另一个表数据获取的id来获取表数据? Django

django - 如何创建到 "timesince"值的转换? (模板标签)

python - 个人资料图片未显示在 django 模板基本 html 页面中