我创建了一个包含多个动态字段(无类属性)的表单,这些字段被添加到 __init__
函数中的 self.fields
中,如下所示:
class CustomForm(django.forms.Form):
def __init__(dynamic_fields, *args, **kwargs):
super(CustomForm, self).__init__(*args, **kwargs)
for name, field in dynamic_fields.items():
self.fields[name] = field
dynamic_fields = {'val1': IntegerField(), 'val2': FloatField()}
CustomForm(dynamic_fields)
现在,我不知道如何在 POST
请求后加载表单。通常,我会做这样的事情:
custom_form = CustomForm(request.POST)
if custom_form.is_valid():
data = custom_form.cleaned_data
...
但是由于调用 super
时 Form 不知道这些字段,所以我不知道之后如何手动加载字段。有想法吗?
最佳答案
您可以在调用 super
__init__
之前更新 base_fields
:
class CustomForm(django.forms.Form):
def __init__(dynamic_fields, *args, **kwargs):
self.base_fields.update(dynamic_fields)
super(CustomForm, self).__init__(*args, **kwargs)
dynamic_fields = {'val1': IntegerField(), 'val2': FloatField()}
CustomForm(dynamic_fields)
关于python - Django:使用动态字段加载表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46730065/