我有一个包含3个表单的表单向导。第一个表单只有一个字段,并使用该字段在外部API中进行查找以验证数据。
我注意到请求花了很长时间,所以我只是添加了一个print语句 表单的 init 方法和外部API客户端调用。
每次在表单向导中执行该步骤时,似乎我的第一个表单被初始化并清理了28次。
我的第一张表格如下:
class MyForm1(forms.Form):
issue_id = forms.CharField()
def __init__(self, *args, **kwargs):
print "init form 1"
super(MyForm1, self).__init__(*args, **kwargs)
def clean(self):
cleaned_data = super(MyForm1, self).clean()
print "clean issue id"
issue_id = cleaned_data.get("issue_id")
if issue_id is not None:
try:
issue = ApiCLient.get_issue(issue_id)
except APIError:
raise forms.ValidationError("Issue not found. Try again!")
else:
return cleaned_data
raise forms.ValidationError("Issue not found. Try again!")
Django Docs中的向导内容非常标准,但在这里:
class MyWizard(SessionWizardView):
def done(self, form_list, **kwargs):
# some logic at the end of the wizard
wizard_forms = [MyForm1, MyForm2, MyForm3]
...
url(r'wizard/$', login_required(views.MyWizard.as_view(wizard_forms))),
正如我之前所说,执行第一步导致
init form 1
clean issue id
正好打印到控制台28次。
有什么想法吗?这是Django表单向导中的功能还是错误?