2

正常に動作する Django Form Wizard を作成しました。ただし、ウィザードを終了して再度開始すると、前回の使用中に生成されたデータがロードされます。代わりに、以前のウィザードの状態をクリアし、成功したら最初からやり直したいと思います。ウィザードの done メソッドを変更しようとしましたが、うまくいきません:

def done(self, form_list, **kwargs):
    self.instance_dict = {}
    self.storage.reset()
    return HttpResponseRedirect('/foo/')

ウィザードを必要な方法で機能させるには、何を変更する必要がありますか? 私のウィザードはNamedUrlSessionWizardViewクラスを拡張します。

4

2 に答える 2

2

これが本当かどうかは100%確信が持てませんが、次のことがうまくいったと思います:

次のようにフォームのインスタンスをウィザードに保存していました。

self.instance_dict['foo'] = foo

しかし、何らかの理由で

self.instance_dict = {}

そのデータをクリアしませんでした。代わりに、オブジェクトを追加データに保存することにしました。

self.storage.extra_data = {'foo' : foo}

次にdef get_form_instance(self, step)、ウィザードのメソッド内で取得します。たとえば、次のようになります。

def get_form_instance(self, step):
    ...
    if self.steps.current == 'foo' and self.storage.extra_data.has_key('foo'):
        return Bar.objects.filter(foo=self.storage.extra_data['foo'])
    ...

そのデータは、上記の done メソッドで正常にクリアされたようです。しかし、最終的には、複雑さが増したため、フォームウィザード全体を削除し、ワンステップフォームを使用しました.

于 2012-08-22T10:32:28.230 に答える