2015-12-14 70 views
2

我有一个django表单向导。在用户进入向导之前,在向导的4个步骤中,我想评估一个if条件来检查数据。django表单向导重定向

当if条件失败时,我想退出向导并将用户重定向到开始页面,其中显示信息块,告诉用户没有数据的问题。

我已经尝试将if条件重定向到向导中的用户,但我被告知我无法在get_context_data()中返回重定向,因为SessionWizardView不会将该值作为响应返回

有没有办法解决这个问题?

这里是我的表单向导代码:

class CreateDocumentWizard(SessionWizardView): 
    template_name = 'documents/document_create.html' 

    form_list = [ 
     core_forms.CreateDocumentWizardForm01, 
     core_forms.CreateDocumentWizardForm02, 
     core_forms.CreateDocumentWizardForm03, 
     core_forms.CreateDocumentWizardForm04, 
    ] 

    def get_form_kwargs(self, step=None): 
     kwargs = super(CreateDocumentWizard, self).get_form_kwargs(step) 
     kwargs.setdefault('user', self.request.user) 
     return kwargs 

    def get_context_data(self, form, **kwargs): 

     name_details_count = NameDetails.objects.filter(user=self.request.user).count() 

     # redirect user if no name details held. 
     if name_details_count < 1: 
      return HttpResponseRedirect('document_start') 

回答

2

您可以挂接到render()甚至get()/post()/dispatch()方法:

class CreateDocumentWizard(SessionWizardView): 

    ... 

    def render(self, form=None, **kwargs): 
     name_details_count = NameDetails.objects.filter(user=self.request.user).count() 

     # redirect user if no name details held. 
     if name_details_count < 1: 
      return HttpResponseRedirect('document_start') 

     return super(CreateDocumentWizard, self).render(form, **kwargs) 
+0

twil - 一个非常非常感谢!该代码是一种享受!真棒! – user3354539