2

前のボタンを押しても現在の入力が検証されない作業中のdjango formwizardがあります。

バリエーションを試してみました

<input name="wizard_goto_step" class="btn btn-primary btn-large" type="submit" value="prev"/>

<button class="btn btn-info btn-large"
        name="wizard_goto_step" type="submit" value="{{ wizard.steps.prev }}">
    {% trans "prev step" %}
</button>

しかし、これらのどちらも私がやりたいことをしていないようです。

4

3 に答える 3

2

前のフォームに戻る前に現在のフォームのデータを検証して保存する場合はpost()、 のサブクラスでメソッドをオーバーライドする必要がありますSessionWizardView。探しているメソッドは、現在のフォーム データself.storage.set_step_data()self.storage.set_step_files()保存することです。

大まかな例:

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) 
于 2013-11-04T19:38:27.580 に答える
2

1 つの (おそらくエレガントな) 方法は、 とは異なる POST 変数を使用してwizard_goto_stepからオーバーライドすることWizardView.get_next_step()です。

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

次に、name="wizard_next_step"前のステップのボタン/リンクで使用します。このアプローチには、必要に応じて古い動作を利用できるという利点と、再実装しないという利点がありますWizardView.post()

于 2014-04-24T18:21:00.607 に答える