/ / Django Form Wizard, wie man den Assistenten zurücksetzt / löscht? - Django, Django-Formen, Django-Formwizard

Django Form Wizard, wie man den Assistenten zurücksetzt / löscht? - Django, Django-Formen, Django-Formwizard

Ich habe einen Django Form Wizard erstellt, der funktioniertfein. Nach dem Beenden des Assistenten und erneutem Starten werden jedoch die Daten geladen, die bei der vorherigen Verwendung generiert wurden. Stattdessen möchte ich, dass der vorherige Wizard-Status gelöscht und neu gestartet wird, sobald der Vorgang erfolgreich abgeschlossen wurde. Ich habe versucht, die Done-Methode des Assistenten zu ändern, aber es funktioniert nicht:

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

Was muss ich ändern, damit der Assistent so funktioniert, wie ich es brauche? Mein Assistent erweitert die NamedUrlSessionWizardView Klasse.

Antworten:

2 für die Antwort № 1

Ich bin mir nicht 100% sicher, ob das stimmt, aber ich denke, das Folgende hat funktioniert:

Ich habe Instanzen von Formularen in meinem Assistenten wie folgt gespeichert:

self.instance_dict["foo"] = foo

aber aus irgendeinem Grund

self.instance_dict = {}

löschte diese Daten nicht. Stattdessen habe ich die Objekte in zusätzlichen Daten gespeichert:

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

Was ich dann innerhalb der def get_form_instance(self, step) Methode des Assistenten, zum Beispiel so:

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"])
...

Diese Daten wurden anscheinend erfolgreich gelöschtmit der oben genannten Methode. Am Ende habe ich jedoch die gesamte Form-Wizard-Sache wegen mehr Komplikationen fallen gelassen und bin einfach mit einem einstufigen Formular gegangen.


0 für die Antwort № 2

Es ist wirklich einfach, den Speicher eines Formularassistenten zurückzusetzen. Normalerweise mache ich das nach der Datenverarbeitung:

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"))

Oder setzen Sie den Assistenten nach der Weiterleitung aus einer anderen Ansicht zurück

del request.session["wizard_name"]