the*_*man 26 python django django-models django-queryset
如果没有Django模型的完整模块路径,是否可以执行以下操作:
model = 'User' [in Django namespace]
model.objects.all()
Run Code Online (Sandbox Code Playgroud)
......而不是:
User.objects.all().
Run Code Online (Sandbox Code Playgroud)
编辑:我试图根据命令行输入进行此调用.是否可以避免导入声明,例如,
model = django.authx.models.User
Run Code Online (Sandbox Code Playgroud)
没有Django返回错误:
"global name django is not defined."
Run Code Online (Sandbox Code Playgroud)
Dan*_*aab 42
我想你正在寻找这个:
from django.db.models.loading import get_model
model = get_model('app_name', 'model_name')
Run Code Online (Sandbox Code Playgroud)
当然还有其他方法,但如果您不知道需要将哪些模型文件导入命名空间,这就是我处理它的方法.(注意,如果没有先了解它所属的应用程序,就没有办法安全地获取模型.如果你想在迭代所有应用程序的模型时测试你的运气,请查看loading.py的源代码.)
更新:根据Django的弃用时间表,django.db.models.loading已在Django 1.7中弃用,并将在Django 1.9中删除.正如Alasdair的回答所指出的,Django 1.7增加了一个用于动态加载模型的新API.
Ala*_*air 41
对于Django 1.7+,有一个应用程序注册表.您可以使用该apps.get_model方法动态获取模型.
from django.apps import apps
MyModel = apps.get_model('app_label', 'MyModel')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11811 次 |
| 最近记录: |