这个问题的灵感来自另一个question。在接受的答案中,建议使用以下方法动态加载任何模型:
from django.db.models.loading import get_model
model = get_model('app_name', 'model_name')
表格有没有等价物?我想动态地从特定应用加载特定表单。
答案 0 :(得分:0)
Django applications保留可用模型列表。这样就可以使用get_model
方法。
应用程序没有保留可用表单的列表,因此没有等效的get_forms
方法。
你链接到的question和你包含的片段是在2009年写的。我上面的链接是针对Django 1.7的,但对于较旧和较新版本的Django,原则是相同的。
答案 1 :(得分:0)
我知道这是一个古老的问题,但是我想我会添加答案,因为这是我在尝试进行此工作时发现的问题之一。我是从this question借来的,能够使用getattr
动态加载表单:
from my_app import forms
custom_form = getattr(forms, 'CustomForm')()
此解决方案要求您已加载模块。
我尚未对其进行测试,但是您应该能够使用import_module
(https://docs.python.org/3/library/importlib.html#importlib.import_module)中的importlib
函数将上述内容与动态模块导入结合起来。该实现将类似于:
from importlib import import_module
forms = import_module('my_app', 'forms')
custom_form = getattr(forms, 'CustomForm')()
Django Oscar经常使用这种动态类加载,因此您可以查看他们的代码以了解他们如何将所有这些组合在一起:https://github.com/django-oscar/django-oscar/blob/master/src/oscar/core/loading.py