He revisado la documentación de django, he hecho muchas búsquedas en Google y he intentado con bastantes soluciones diferentes pero fue en vano.Cómo/dónde detener el método 'hecho' de Django Formwizards que se invoca en la falla de pago
He creado un formulario de 3 partes utilizando FormWizard de Django. Una vez que se valida el último formulario (un formulario de pago), envío una solicitud de pago a una pasarela de pago.
Estoy haciendo el procesamiento de pagos en el método 'process_step' de FormWizard.
Tengo dificultades para descubrir cómo mostrar FormWizard la página de pago nuevamente cuando falla el pago. Tal como está ahora, se llama al método 'hecho' de FormWizard (después de que he hecho mi procesamiento en process_step), ya que todos los formularios han sido validados.
Me pregunto si necesito anular el método de llamada. No estoy muy seguro de cómo hacerlo, pero actualmente estoy tratando de resolverlo.
Cualquier ayuda sería muy apreciada. Saludos, 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/')
Creo que me falta algo fundamental en la forma en que se procesan los formularios con FormWizard. Lo que quiero hacer es algo así como los comentarios en el paso == 2 de process_step (como se muestra en el código de prueba). Simplemente no estoy seguro de qué código poner allí. No importa lo que ponga ahí, el método hecho parece ser ejecutado ya que el último formulario ha sido validado. Si alguien pudiera proporcionar una línea de código que funcionaría allí para mostrar el formulario de pago nuevamente (x número de veces hasta que el pago tenga éxito), o sugerir algo que podría hacer en render_template o en otro lugar, sería de gran ayuda. – shawn