2016-11-24 3 views
0

Лучше всего описано в примере. Рассмотрим следующий код (Джанго 1,9)Обработка исключений Django отменяет неатомный режим транзакции

Вид:

@transaction.non_atomic_requests 
def error_generating_view(request): 
    modelA = ModelA(...) 
    modelA.save() 
    if (some_bad_condition) 
     return json_error_msg ('Some custom message') 
    return HttpResponse(True) 

Посмотреть в другом модуле

def json_error_msg(error_message): 
    return JsonResponse(json.dumps(error_message, ensure_ascii=False), status = 500, safe = False) 

Django, кажется, через исключение на стороне клиента, но проблема здесь что экземпляр модели сохраняется, хотя я установил @transaction.non_atomic_requests. Похоже, я делаю что-то неправильно с синтаксисом обработки исключений.

Может ли кто-нибудь указать на то, что именно я должен исправить здесь, чтобы сделать Django с помощью настраиваемого сообщения об исключительных ситуациях клиенту и одновременно обработать весь вид как завершенный неправильно, чтобы транзакция была откатна?

ответ

1

Использование transaction.atomic декоратор, не transaction.non_atomic_requests - с помощью transaction.non_atomic_requests вы говорите Django, что этот запрос не должен быть обернут в сделке (каждое изменение автоматически поручены к базе данных)

Смежные вопросы