/ / Djangoフォームウィザード、どのようにリセット/ウィザードをクリアするには? - django、django-forms、django-formwizard

Djangoフォームウィザード、どのようにリセット/ウィザードをクリアするには? - django、django-forms、django-formwizard

私は動作する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"]