私は動作するDjangoフォームウィザードを作成しました良い。ただし、ウィザードを終了してもう一度開始すると、前回の使用時に生成されたデータがロードされます。代わりに、以前のウィザードの状態をクリアし、正常に終了したらやり直してください。私はウィザードのdoneメソッドを変更しようとしましたが、それはできません:
def done(self, form_list, **kwargs):
self.instance_dict = {}
self.storage.reset()
return HttpResponseRedirect("/foo/")
ウィザードを必要に応じて動作させるためには、何を変更する必要がありますか?私の魔法使いは NamedUrlSessionWizardView
クラス。
回答:
回答№1は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"])
...
そのデータは明らかにクリアされています上記の方法で行う。しかし、最終的には、複雑さが増したためにフォームウィザード全体を落とし、ワンステップフォームを使用しました。
回答№2の場合は0
フォームウィザードの記憶域をリセットするのは簡単ですが、通常はデータ処理が完了した後で行います。
def done(self, form_list, form_dict, **kwargs):
#do stuff with your form data
self.instance_dict = None
self.storage.reset()
return redirect(reverse_lazy("somewhere"))
別のビューからリダイレクトした後にウィザードをリセットする
del request.session["wizard_name"]