Ich habe durch die Django-Dokumentation, viel Googeln geschaut und habe einige verschiedene Lösungen ausprobiert, aber ohne Erfolg.Wie/wo zu stoppen Django Formwizards 'done' Methode wird bei Zahlungsausfall
Ich habe ein 3-teiliges Formular mit Django FormWizard erstellt. Sobald das letzte Formular (ein Zahlungsformular) bestätigt ist, sende ich eine Zahlungsanforderung an ein Zahlungs-Gateway.
Ich mache die Zahlungsverarbeitung in der Methode 'process_step' des FormWizard.
Ich habe Schwierigkeiten herauszufinden, wie der FormWizard die Zahlungsseite erneut anzeigen kann, wenn die Zahlung fehlschlägt. Wie es jetzt ist, wird die 'done'-Methode des FormWizard aufgerufen (nachdem ich meine Verarbeitung in process_step durchgeführt habe), da alle Formulare validiert wurden.
Ich frage mich, ob ich die Aufruf Methode überschreiben muss. Ich bin mir nicht sicher, wie das geht, aber ich versuche es gerade herauszufinden.
Jede Hilfe würde sehr geschätzt werden. Grüße, Shawn
class TrainingWizard(FormWizard):
def process_step(self,request,form,step):
if step == 0:
self.extra_context = {'stepOne': "One"}
if step == 1:
self.extra_context = {'stepTwo': "Two"}
if step == 2:
if self.get_response != "Success":
#Payment Failed
#Add error message
#Show Payment Form Again to allow user to retry
return
def get_response(self):
#return "Success"
return "Declined"
def done(self, request, form_list):
return HttpResponseRedirect('/training-registration-complete/')
Ich denke, ich vermisse etwas grundlegend in der Art, wie Formulare mit FormWizard verarbeitet werden. Was ich tun möchte, ist etwas wie die Kommentare in Step == 2 von process_step (wie im Testcode gezeigt). Ich bin mir nicht sicher, welchen Code ich dort eingeben soll. Egal was ich da hineinlege, die done-Methode scheint ausgeführt zu werden, da das letzte Formular validiert wurde. Wenn jemand eine Codezeile zur Verfügung stellen könnte, die dort arbeiten würde, um das Zahlungsformular erneut anzuzeigen (x Anzahl, bis die Zahlung erfolgreich ist), oder etwas vorschlagen, was ich in render_template oder anderswo tun könnte, wäre es eine große Hilfe. – shawn