Один из моих взглядов в Django выполняет операции сохранения на 6-7 таблицах. Я хочу, чтобы эти транзакции были атомами c I, если 5-я или 6-я транзакция не удалась, я хочу откатить все предыдущие сохранения. Представление содержит блок try-исключения для обработки возникших исключений.
Это выглядит примерно так:
@transaction.atomic
def my_view(request):
sid = transaction.savepoint()
try:
Table1.save()
Table2.save()
Table3.save()
Table4.save()
Table5.save()
Table6.save()
Table7.save() # This might fail. In case of failure I want to rollback saves from Table1 to Table6
transaction.savepoint_commit(sid)
except Exception as e:
print(str(e))
transaction.savepoint_rollback(sid)
return JsonResponse({"Status": 0, "Data": str(e)})
Я пробовал выше, а Table7.save () не удался и Откат Table1 to Table6 не произошел. Я хочу вернуть ответ JSON как {"Status": 0, Data: "Error That occurred"}
во всех случаях. Я не хочу повторно вызывать исключение в блоке исключений, как это сделано в Эта ссылка
Что я должен сделать, чтобы вернуть правильный JSONResponse и откатить все в случае сбоя?