2014-12-07 3 views
10

장고보기를 원한다면 좋겠습니다. 내 말은, 만약 거기에 2 DB를 -보기에 쓰기, 나는 둘 중 쓰기, 2 쓰기 중 하나를 원한다. 예를 들어Django atomic 요청은 어떻게 작동합니까?

: 나는이 문서에서 찾을 무엇

def test_view(request): 
    ''' A test view from views.py ''' 

    MyClass.objects.create() 
    raise Exception("whatever") 
    MyClass.objects.create() 

유망 듯 : 웹 트랜잭션을 처리 할 수 ​​

일반적인 방법은 트랜잭션의 각 요청 을 래핑하는 것입니다. 이 동작을 사용하려는 각 데이터베이스의 구성에서 ATOMIC_REQUESTS를 True로 설정하십시오.

다음과 같이 작동합니다. Django는 뷰 함수를 호출하기 전에 트랜잭션을 시작합니다. 응답이 문제없이 생성되면 Django 이 트랜잭션을 커밋합니다. 뷰가 예외를 생성하면 Django 은 트랜잭션을 롤백합니다.

그러나 ATOMIC_REQUESTS = True을 설정하더라도 test_view()을 호출하면 첫 번째 MyClass 개체가 만들어집니다! 내가 뭘 놓치고 있니?

참고 : 나는

+0

여기서 'ATOMIC_REQUESTS'값을 설정 했습니까? 'AUTOCOMMIT' 값은 무엇입니까? – koxt

답변

27

ATOMIC_REQUESTS는 데이터베이스 연결 설정의 속성은하지 최상위 설정, 장고 1.7 DICT이되어 사용하고 있습니다. 예 :

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.postgresql_psycopg2', 
     'NAME': 'mydatabase', 
     'USER': 'mydatabaseuser', 
     'PASSWORD': 'mypassword', 
     'HOST': '127.0.0.1', 
     'PORT': '5432', 
     'ATOMIC_REQUESTS': True, 
    } 
}