Skip to main content
 首页 » 编程设计

python之django 表单向导重定向

2024年08月23日33fff_TT

我有一个 Django 表单向导。在用户进入向导之前以及向导的 4 个步骤中的每一个步骤中,我都想评估 if 条件以检查数据。

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

我已经尝试在向导中放置 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') 

请您参考如下方法:

你可以 Hook 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)