From 46246c66243c97198879c9ac79ef859ae2474524 Mon Sep 17 00:00:00 2001 From: Stephan Jaekel Date: Wed, 30 Jan 2013 19:46:27 +0100 Subject: [PATCH 1/2] Moved the code to handle goto requests in a extra WizardView method. --- django/contrib/formtools/wizard/views.py | 28 ++++++++++++++++------ docs/ref/contrib/formtools/form-wizard.txt | 11 +++++++++ 2 files changed, 32 insertions(+), 7 deletions(-) diff --git a/django/contrib/formtools/wizard/views.py b/django/contrib/formtools/wizard/views.py index cba39151e7..2f6168c89d 100644 --- a/django/contrib/formtools/wizard/views.py +++ b/django/contrib/formtools/wizard/views.py @@ -257,11 +257,7 @@ class WizardView(TemplateView): # form. (This makes stepping back a lot easier). wizard_goto_step = self.request.POST.get('wizard_goto_step', None) if wizard_goto_step and wizard_goto_step in self.get_form_list(): - self.storage.current_step = wizard_goto_step - form = self.get_form( - data=self.storage.get_step_data(self.steps.current), - files=self.storage.get_step_files(self.steps.current)) - return self.render(form) + return self.render_goto_step(wizard_goto_step) # Check if form was refreshed management_form = ManagementForm(self.request.POST, prefix=self.prefix) @@ -309,6 +305,17 @@ class WizardView(TemplateView): self.storage.current_step = next_step return self.render(new_form, **kwargs) + def render_goto_step(self, goto_step, **kwargs): + """ + This method gets called when the current step has to be changed. + `goto_step` contains the requested step to go to. + """ + self.storage.current_step = goto_step + form = self.get_form( + data=self.storage.get_step_data(self.steps.current), + files=self.storage.get_step_files(self.steps.current)) + return self.render(form) + def render_done(self, form, **kwargs): """ This method gets called when all forms passed. The method should also @@ -652,8 +659,7 @@ class NamedUrlWizardView(WizardView): """ wizard_goto_step = self.request.POST.get('wizard_goto_step', None) if wizard_goto_step and wizard_goto_step in self.get_form_list(): - self.storage.current_step = wizard_goto_step - return redirect(self.get_step_url(wizard_goto_step)) + return self.render_goto_step(wizard_goto_step) return super(NamedUrlWizardView, self).post(*args, **kwargs) def get_context_data(self, form, **kwargs): @@ -674,6 +680,14 @@ class NamedUrlWizardView(WizardView): self.storage.current_step = next_step return redirect(self.get_step_url(next_step)) + def render_goto_step(self, goto_step, **kwargs): + """ + This method gets called when the current step has to be changed. + `goto_step` contains the requested step to go to. + """ + self.storage.current_step = goto_step + return redirect(self.get_step_url(goto_step)) + def render_revalidation_failure(self, failed_step, form, **kwargs): """ When a step fails, we have to redirect the user to the first failing diff --git a/docs/ref/contrib/formtools/form-wizard.txt b/docs/ref/contrib/formtools/form-wizard.txt index bcffb7716b..9f6d627be5 100644 --- a/docs/ref/contrib/formtools/form-wizard.txt +++ b/docs/ref/contrib/formtools/form-wizard.txt @@ -454,6 +454,17 @@ Advanced ``WizardView`` methods def process_step_files(self, form): return self.get_form_step_files(form) +.. method:: WizardView.render_goto_step(step, goto_step, **kwargs) + + .. versionchanged:: 1.6 + + This method is called when the step should be changed to something else + than the next step. By default, this method just stores the requested + step ``goto_step`` in the storage and then renders the new step. + + If you want to store the entered data of the current step before rendering + the next step, you can overwrite this method. + .. method:: WizardView.render_revalidation_failure(step, form, **kwargs) When the wizard thinks all steps have passed it revalidates all forms with From 1c8a1706fbd91b303245292dcf0da0651f1b80e0 Mon Sep 17 00:00:00 2001 From: Stephan Jaekel Date: Sat, 23 Mar 2013 13:27:16 +0100 Subject: [PATCH 2/2] Updated docs, changed versionchanged to versionadded. --- docs/ref/contrib/formtools/form-wizard.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/ref/contrib/formtools/form-wizard.txt b/docs/ref/contrib/formtools/form-wizard.txt index 9f6d627be5..315153c602 100644 --- a/docs/ref/contrib/formtools/form-wizard.txt +++ b/docs/ref/contrib/formtools/form-wizard.txt @@ -456,7 +456,7 @@ Advanced ``WizardView`` methods .. method:: WizardView.render_goto_step(step, goto_step, **kwargs) - .. versionchanged:: 1.6 + .. versionadded:: 1.6 This method is called when the step should be changed to something else than the next step. By default, this method just stores the requested