在django建立动态形式

时间:2010-02-10 02:55:02

标签: python django django-forms

我正在尝试根据存储在数据库中的字段及其定义动态构建表单。在我的数据库中,我已经定义了1个带有一些标签的复选框和带有一些标签的1个文本域。

如何在数据库中的数据中动态构建表单?

由于

2 个答案:

答案 0 :(得分:10)

以下是我在EuroDjangoCon上发表的关于正确做到这一点的演讲的幻灯片:http://www.slideshare.net/kingkilr/forms-getting-your-moneys-worth

答案 1 :(得分:4)

Django在您的model definitions.

中自动生成表单非常出色

第一步可能是创建一个镜像现有数据库的Django模型。

关于复选框/文本字段:

Django在字段小部件之间有很好的分离。您可能拥有存储数字的 IntegerField ,但您可以更改用户在想要编辑该数字时显示的窗口小部件。在某些情况下,您可能有一个输入框,在其他情况下可能有一个textarea,或者可能是一个下拉列表。 字段会处理类型转换和验证等细节,窗口小部件会确定表单字段的外观。

某些字段类型具有与之关联的默认小部件,但您可以覆盖它们。

另请注意,表单字段模型字段之间存在差异


要动态执行此操作,可以动态地将项目添加到self.fields SortedDict。即:

from django.forms.forms import Form
from django.forms.fields import CharField
class FunkyForm(Form):
    def __init__(self, *args, **kwargs):
        super(FunkyForm, self).__init__(*args, **kwargs)
        for item in range(5):
            self.fields['test_field_%s' % item] = CharField(max_length=255)

将为您提供一个表单类,该表单类使用5个动态生成的CharField进行实例化。