Django - 如何进行多页表单?

时间:2014-04-15 23:05:00

标签: django forms

我正在进行一个包含3个步骤的注册过程,

1 - (Getting Started), Basic Info
2 - (Checkout), Payment
3 - (Profile Details), choose user and password

我一直在瞪眼,但我不确定这样做的最佳方法是什么。

我应该通过在网址上生成UUID来跟踪数据吗?

http://some.com/signup/123kslk434435
http://some.com/signup/checkout/123kslk434435
http://some.com/signup/create-account/123kslk434435

或者我应该使用会话吗?

最好的方法是什么?

最诚挚的问候, 安德烈

1 个答案:

答案 0 :(得分:1)

Django Form Wizard可能就是你所追求的。这将处理为您创建会话(使用SessionWizardView),然后在工作流程结束时向您展示每个已完成的表单,然后您可以根据需要处理这些表单,保存到对象等。

为每个步骤创建每个表单:

from django import forms

class BasicInfoForm(forms.Form):
    info_field_1 = forms.CharField(max_length=100)
    ...

class CheckoutForm(forms.Form):
    checkout_field_1 = forms.CharField(max_length=100)

...

然后创建您的视图,该视图将在您完成所有操作后对其进行处理。务必在最后重定向。

from django.http import HttpResponseRedirect
from django.contrib.formtools.wizard.views import SessionWizardView

class SignupWizard(SessionWizardView):
    def done(self, form_list, **kwargs):
        (process each of your forms, which are contained in form list)
        return HttpResponseRedirect('/page-to-redirect-to-when-done/')

然后将表单与urlconfig中的视图连接

urlpatterns = [
    url(r'^contact/$', ContactWizard.as_view([BasicInfoForm, CheckoutForm, ...]))
]

请参阅有关创建模板的文档,如何处理form_list等。