如果没有 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/