2016-03-25 6 views
0

Я хочу отменить транзакцию, когда открывается представление Exception.Django Transaction не работает

Я стараюсь следовать шаг на Django Doc

Но, кажется, что это не работает.

Вот мой код:

models.py

class Cargo(models.Model): 
    serial_number = models.CharField() 
    name = models.CharField() 

views.py

из django.http импорта JsonResponse из .models импортных грузов

def test(request): 
    cargo = Cargo(serial_number='123456', name='cargo') 
    cargo.save() 
    raise Exception() 
    return JsonResponse({'message': 'ok'}) 

Я включил свой ATOMIC_REQUESTS в моих settings.py.

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.mysql', 
     'NAME': 'TABLE', 
     'USER': 'USER', 
     'PASSWORD': 'PASSWORD', 
     'HOST': '127.0.0.1', 
     'PORT': '1234', 
     'ATOMIC_REQUESTS': True, 
    } 
} 

Но каждый раз, когда я посетить test вид, это поднять исключение и еще добавить строку «груз» в моем дб.

Я хочу знать, как включить транзакцию Django.

Спасибо!


И еще один вопрос, если я использую atomic descriped в Doc, как:

views.py

from django.http import JsonResponse 
from django.db import transaction 
from .models import Cargo 

@transaction.atomic 
def test(request): 
    cargo = Cargo(serial_number='123456', name='cargo') 
    cargo.save() 
    raise Exception() 
    return JsonResponse({'message': 'ok'}) 

является 'ATOMIC_REQUESTS': True еще необходимо.

ответ

0

Ну, я, наверное, не скажу вам что-нибудь новое, что вы не знаете, из документации, но по умолчанию вид Джанго работает в режиме автоматической фиксации так что каждый запрос немедленно сохраняются в базу данных , Если вы установили 'ATOMIC_REQUESTS': True, нет необходимости использовать @transaction.atomic, потому что каждый вид уже является оберткой транзакции с использованием ATOMIC_REQUESTS.

+0

О, спасибо, я дал понять это сейчас. – Nutto