나는 간단한 라이브러리 응용 프로그램을 가지고 있습니다.장고의 제어 원자 트랜잭션
settings.py
에서 :
AUTOCOMMIT=False
from django.db import IntegrityError, transaction
class CreateLoan(forms.Form):
#Fields...
def save(self):
id_book = form.cleaned_data.get('id_book', None)
id_customer = form.cleaned_data.get('id_customer', None)
start_date = form.cleaned_data.get('start_date', None)
book = Book.objects.get(id=id_book)
customer = Customer.objects.get(id=id_customer)
new_return = Return(
book=book
start_date=start_date)
txn=Loan_Txn(
customer=customer,
book=book,
start_date=start_date
)
try
with transaction.atomic():
book.update(status="ON_LOAN")
new_return.save(force_insert=True)
txn.save(force_insert=True)
except IntegrityError:
raise forms.ValidationError("Something occured. Please try again")
forms.py
에서 하나 개의 동작으로 저지하고, 작업 중 하나가 실패 할 경우 롤백 3 개 작업을 강제하기 위해, 나는 다음과 같은 코드를 변경했다
나는 이것에 관해서 아직도 아무것도 놓치고 있냐? 나는 장고 1.9를 파이썬 3.4.3과 함께 사용하고 있으며 데이터베이스는 MySQL이다.
왜 'AUTOCOMMIT = False'를 설정하고 있습니까? 그러지 마. 그렇지 않으면 올바른 아이디어를 얻었습니다. –
@KevinChristopherHenry가 루프를 닫으면, 왜'AUTOCOMMIT = False'가 쿼리에 도움이되지 않는지 질문 할 수 있습니까? 기본적으로'AUTOCOMMIT = True'라고하고,'atomic' 블록으로 싸여 있지 않은 모든 트랜잭션에 대해서 그들은 실행하고 커밋 할 것이라고 말하는 것이 맞습니까? – bryansis2010
맞습니다. 자세한 내용은 제 답변을 참조하십시오. –