перенаправление мастера форм django

У меня есть мастер формы django. Прежде чем пользователь войдет в мастер и на каждом из 4 шагов мастера, я хочу оценить условие if для проверки данных.

Когда условие 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')

person user3354539    schedule 14.12.2015    source источник


Ответы (1)


Вы можете подключиться к 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)
person twil    schedule 15.12.2015
comment
твил - большое спасибо! этот код работает! Потрясающий! - person user3354539; 15.12.2015