Django form wizard save and go to previous step

后端 未结 2 1692
-上瘾入骨i
-上瘾入骨i 2021-01-01 07:07

I have a working django formwizard which when I hit the previous button doesn\'t validate the current input.

I\'ve tried variations on



        
相关标签:
2条回答
  • 2021-01-01 07:37

    One (arguably elegant) way would be to use a different POST variable than wizard_goto_step, and then override WizardView.get_next_step():

    def get_next_step(self, step=None):
        return self.request.POST.get('wizard_next_step',
                super().get_next_step(step))
    

    Then, use name="wizard_next_step" on the previous-step button/link. This approach both has the advantage that the old behavior remains available should you need it, and that you're not re-implementing WizardView.post().

    0 讨论(0)
  • 2021-01-01 07:42

    If you want it to validate and save the data on the current form before stepping back to a previous form, you need to override the post() method in your subclass of SessionWizardView. The methods you're looking for are self.storage.set_step_data() and self.storage.set_step_files() to save the current form data.

    A rough example:

    def post(self, *args, **kwargs):                                                                                                                                                                                                                    
        go_to_step = self.request.POST.get('wizard_goto_step', None)  # get the step name                                                                                                                                               
        form = self.get_form(data=self.request.POST, files=self.request.FILES)                                                      
    
        current_index = self.get_step_index(self.steps.current)                                                                     
        goto_index = self.get_step_index(go_to_step)                                                                                
    
        if current_index > goto_index:    
            if form.is_valid():                                                                      
                self.storage.set_step_data(self.steps.current,                                                                          
                    self.process_step(form))                                                                                            
                self.storage.set_step_files(self.steps.current,                                                                         
                    self.process_step_files(form))                                                                                      
        else:                                                                                                                       
            return self.render(form)                                                                                                
        return super(NominateFormWizard, self).post(*args, **kwargs) 
    
    0 讨论(0)
提交回复
热议问题