如何动态检索Django表单类?

时间:2015-02-07 07:35:54

标签: django forms

这个问题的灵感来自另一个question。在接受的答案中,建议使用以下方法动态加载任何模型:

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

表格有没有等价物?我想动态地从特定应用加载特定表单

2 个答案:

答案 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_modulehttps://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