Django向导:多次调用表单实例化和清理

时间:2013-09-24 13:30:03

标签: python django django-forms

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

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

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

我的第一张表格如下:

forms.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中的向导内容非常标准,但在这里:

views.py

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

urls.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表单向导中的功能还是错误?

0 个答案:

没有答案