在django建立动态形式

use*_*736 2 python django django-forms

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

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

谢谢

Ale*_*nor 10

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


Koo*_*obz 5

Django 在根据模型定义自动生成表单方面做得非常出色

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

关于复选框/文本字段的内容:

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

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

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


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

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)
Run Code Online (Sandbox Code Playgroud)

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