在Django中构建动态表单
我正在尝试根据存储在数据库中的字段及其定义动态生成一个表单。在我的数据库里,我定义了一个复选框和一个文本框,每个都有自己的标签。
我该如何根据数据库中的数据在我的视图中动态构建这个表单呢?
谢谢!
2 个回答
11
这是我在EuroDjangoCon上做的一个演讲的幻灯片,内容正是关于如何做到这一点的:http://www.slideshare.net/kingkilr/forms-getting-your-moneys-worth
5
Django在根据你的模型定义自动生成表单方面做得非常好。
第一步可能是创建一个Django模型,这个模型要和你现有的数据库结构相对应。
关于复选框和文本框的内容:
Django在字段和小部件之间有很好的区分。比如,你可能有一个整数字段用来存储数字,但在用户想要编辑这个数字时,显示给他们的小部件可以是不同的。在某些情况下,你可能会看到一个输入框,在其他情况下可能是一个文本区域,或者是一个下拉菜单。字段负责处理类型转换和验证等细节,而小部件则决定了表单字段的外观。
某些字段类型有默认的小部件,但你可以根据需要进行更改。
另外,请注意表单字段和模型字段之间是有区别的。
如果想要动态添加内容,可以在运行时向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个字符字段。