Merge pull request #942 from stephrdev/trac-18000

Fixed #18000 -- Moved the code to handle goto requests to an extra WizardView method.
This commit is contained in:
Jannis Leidel 2013-03-23 05:29:28 -07:00
commit e7514e4978
2 changed files with 32 additions and 7 deletions

View File

@ -265,11 +265,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)
@ -317,6 +313,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
@ -660,8 +667,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):
@ -682,6 +688,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

View File

@ -469,6 +469,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)
.. 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
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