我正在尝试根据存储在数据库中的字段及其定义动态构建表单。在我的数据库中,我已经定义了1个带有一些标签的复选框和带有一些标签的1个文本域。
如何在数据库中的数据中动态构建表单?
由于
答案 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进行实例化。