Python django创建自定义表单
我们可以通过继承forms.form直接创建一个简单的表单。但是,我希望表单根据管理员指定的键值动态创建。考虑一下,用户提供的地图如下:Python django创建自定义表单,python,django,forms,django-forms,Python,Django,Forms,Django Forms,我们可以通过继承forms.form直接创建一个简单的表单。但是,我希望表单根据管理员指定的键值动态创建。考虑一下,用户提供的地图如下: [ { "key": "name", "value": "CharField" }, { "key": "url", "value": "URLField" } ] 基于上面给出的映射,我如何创建一个与下面基于类的表单创建等效的表单: from django import forms class Comment
[
{
"key": "name",
"value": "CharField"
},
{
"key": "url",
"value": "URLField"
}
]
基于上面给出的映射,我如何创建一个与下面基于类的表单创建等效的表单:
from django import forms
class CommentForm(forms.Form):
name = forms.CharField(label='name')
url = forms.URLField(label='url')
我目前的方法可能是迭代每个键值对,并手动生成HTML表单。是否可以在django中创建动态表单而不必编写类定义?是的,您可以在表单的init函数中执行此操作 创建表单时,将映射数组作为一个额外的关键字参数传入,然后在从super调用init方法之前从kwargs中弹出它 然后,您可以使用它向表单动态添加字段
class CommentForm(forms.Form):
def __init__(self , *args, **kwargs):
field_mapping_array = kwargs.pop('field_mapping_array')
super(CommentFrom, self).__init__(*args, **kwargs)
for field_type in field_mapping_array:
field_name = field_type['key'] # make sure keys are unique
if field_type[value] == "CharField":
self.fields[field_name] = form.CharField(...extra args here)
elif field_type['value'] == 'UrlField' :
self.fields[field_name] = form.UrlField(...extra args here)
elif .... map other field types here....
创建表单时,将字段\映射\数组传递到表单类中
field_mapping = [
{
"key": "name",
"value": "CharField"
},
{
"key": "url",
"value": "URLField"
}
]
comment_form = CommentForm(field_mapping_array=field_mapping)
您从哪里获得额外属性(
标签
,选项
,等等)?现在,我们可以假设它的值为key。但是,我会根据地图添加元数据。