gpt4 book ai didi

python - django 创建自定义表单

转载 作者:太空宇宙 更新时间:2023-11-04 05:15:01 25 4
gpt4 key购买 nike

我们可以通过继承forms.Form直接创建一个简单的表单。但是,我希望根据管理员指定的键值动态创建表单。考虑一下,用户将 map 提供为:

[
{
"key": "name",
"value": "CharField"
},
{
"key": "url",
"value": "URLField"
}
]

根据上面给出的 map ,我如何创建一个等同于下面基于类的表单创建的表单:

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_array 传递到表单类中。

field_mapping = [
{
"key": "name",
"value": "CharField"
},
{
"key": "url",
"value": "URLField"
}
]
comment_form = CommentForm(field_mapping_array=field_mapping)

关于python - django 创建自定义表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41967681/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com