1

我有一个带有 3 个表单的表单向导。第一个表单只有一个字段,并使用该字段在外部 API 中进行查找以验证数据。

我注意到请求花费的时间异常长,所以我只是在表单的init方法和外部 API 客户端调用中添加了一个打印语句。

似乎每次我在表单向导中执行该步骤时,我的第一个表单都被初始化和清理了 28 次。

我的第一个表单如下所示:

表格.py

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 中是相当标准的,但在这里:

视图.py

class MyWizard(SessionWizardView):
    def done(self, form_list, **kwargs):
        # some logic at the end of the wizard

网址.py

wizard_forms = [MyForm1, MyForm2, MyForm3]
...
url(r'wizard/$', login_required(views.MyWizard.as_view(wizard_forms))),

正如我之前所说,执行第一步会导致

init form 1
clean issue id

被打印到控制台正好 28 次。

有任何想法吗?这是 Django 表单向导中的功能还是错误?

4

0 回答 0