[pyar] [django] incluyendo operaciones en la misma transacción

Maximiliano Robaina maxi_robaina en yahoo.com.ar
Jue Ene 6 09:29:28 ART 2011


El jue, 06-01-2011 a las 01:45 -0300, Ramiro Morales escribió:
> 2011/1/5 Maximiliano Robaina <maxi_robaina en yahoo.com.ar>:
> 
> >
> > Cuando se hace el save() quiero que guarde el cambio en CbteEstados, por
> > la tanto lo primero que se me ocurre es sobreescribir el método save()
> > de Comprobante para allí insertar en CbteEstados.
> >
> > [...]
> >
> > Ahora, lo primero que veo es, el save() de CbteEstados ocurre en otra
> > transacción del save() de Comprobante ? Es así, no?
> >
> > Podría usar el decorador @transaction para manejar yo la atomicidad de
> > la operación, pero es correcto usar esto en el save() de mi modelo ?
> >
> > ¿Hay alguna otra forma de manjar esto?
> >

> 
> ¿Qué quers que suceda si falla o tiene exito la grabación tanto de un
> Comprobante
> como de un CbteEstados?

Según la secuencia de grabación:

# método save del modelo Comprobante
def save(self, force_insert=False, force_update=False):
        super(Comprobante, self).save(force_insert, force_update)
        ce = CbteEstados()
        ce.cbte = self
        ce.estado = self.estado
        ce.save()


Si super(Comprobante, self).save(force_insert, force_update) fallá,
levantará una excepción y por lo tanto la actualización de CbteEstados
no ocurrirá.

Si super(Comprobante, self).save(force_insert, force_update) se ejecuta
correctamente, pero fallá al grabar CbteEstados, debería hacer un
rollback de todo, es decir, no se grabaría Comprobante()

Supongamos también que al grabar un Comprobante, quire actualizar no un
modelo como CbteEstados en este ejemplo sino varios, es decir, habría
varios save()

> 
> ¿En qué contexto querés hacer todo esto? ¿Durante el tratamiento de un request
> HTTP?
> 

Si, en este caso es bajo el contexto de un request, por lo que quizás,
como decía en el mail original, podría usar decorar mi view con algún
método de @transaction, como por ej.  commit_on_success

Pero, y si no?  
Debería usar si o si un decorador de transaction ?



Saludos.
---
Maxi.







More information about the pyar mailing list