Sto tentando di creare una vista in cui salvo un oggetto ma mi piacerebbe annullare che salva se viene sollevata qualche eccezione. Questo è quello che ho provato:Django - Rollback Salva con transazione atomica
class MyView(View):
@transation.atomic
def post(self, request, *args, **kwargs):
try:
some_object = SomeModel(...)
some_object.save()
if something:
raise exception.NotAcceptable()
# When the workflow comes into this condition, I think the previous save should be undome
# Whant am I missing?
except exception.NotAcceptable, e:
# do something
Cosa sto facendo male? anche quando viene sollevata l'eccezione, some_object
è ancora in DataBase.
Questa vista è per un'API, quindi penso di dover gestire qualsiasi errore possibile per dare una risposta jSON propper. Non c'è modo di farlo con un decoratore atomico? – Gocht
Non con il decoratore, perché gestisce la transazione al di fuori della tua funzione. Bel esempio con il gestore di contesto! – jpic
È necessario avere un blocco atomico all'interno del try ... tranne il blocco come nella risposta. Puoi anche usare il decoratore atomico sulla vista se lo desideri. – Alasdair