from django.db import transaction def transaction_decorator(function_to_decorate): def wrap(*args, **kwargs): transaction.set_autocommit(False) try: result = function_to_decorate(*args, **kwargs) except Exception as ex: transaction.rollback() raise ex else: transaction.commit() return result finally: transaction.set_autocommit(True) return wrap