python - 如何动态检索 Django 模型类?

标签 python django django-models django-queryset

如果没有 Django 模型的完整模块路径,是否可以执行以下操作:

model = 'User' [in Django namespace]
model.objects.all()

...相对于:

User.objects.all().

编辑:我正在尝试根据命令行输入进行此调用。是否可以避免导入语句,例如,

model = django.authx.models.User

没有 Django 返回错误:

"global name django is not defined."

最佳答案

我想你正在寻找这个:

from django.db.models.loading import get_model
model = get_model('app_name', 'model_name')

当然还有其他方法,但如果您不知道需要将哪些模型文件导入命名空间,我会采用这种方法。 (请注意,如果不首先知道它属于哪个应用程序,实际上没有办法安全地获取模型。如果您想测试您在迭代所有应用程序模型时的运气,请查看 loading.py 的源代码。)

Django 1.7+ 的更新: 根据 Django 的 deprecation timeline , django.db.models.loading 在 Django 1.7 中已被弃用,并将在 Django 1.9 中删除。正如 Alasdair's answer 中指出的那样, 在 Django 1.7+ 中,有一个 applications registry .您可以使用 apps.get_model动态获取模型的方法:

from django.apps import apps
MyModel = apps.get_model('app_label', 'MyModel')

关于python - 如何动态检索 Django 模型类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/411810/

相关文章:

python - psycopg2.编程错误: column of relation does not exist

python - 如何在Intel & python2.7上安装pytorch?

python - Django 1.10 : base_site. html 覆盖不起作用

python - Django 将输入数据从 HTML 文件传递​​到 python 脚本,然后将最终数据发送到另一个 HTML 文件

python - Django 用户的国家选择

Django 在管理模型中呈现 related_name 对象

python - Django 1.7 - ImageField,我的图像没有上传到 MEDIA_URL

python - 将文件句柄传递给 cython 函数

django - 每当在 django 中创建或更新模型时运行一些 python 函数?

django - InlineModelAdmin 未显示在管理页面上