私のライブラリアプリケーションのutil
クラスからの保存メソッドがあります。自己定義utils.py
で:メソッド関連トランザクションのDjangoアトミックトランザクション
def update_book_count(key):
key_to_update = BookConfig.objects.get(key=key)
"""
returns {'key': 'Chemistry-700', 'count': 15}
"""
key_to_update.count = key_to_update.count + 1
key_to_update.save()
forms.py
にこのコードを考えてみましょう:
class AddBookForm(forms.Form):
#some fields
def save(self):
title = self.cleaned_data.get('title')
category = self.cleaned_data.get('category') #Chemistry
try:
with transaction.atomic():
book = Book(title=title, category=category)
book.save(force_insert=True, force_update=False)
update_book_count(category)
#Say just for this case, I find reservations for this title
loan = Loan.objects.filter(
title=title,status="PENDING_BOOK_PURCHASE")
loan.update(status="PENDING_MEMBER_COLLECTION")
except IntegrityError:
print("Atomic Txn Error")
私の質問は:atomic()
はupdate_book_count
方法でデータベーストランザクションに及ぶのか?具体的に:
update_book_count
メソッドが失敗した場合、book.save()
トランザクションはあまりにもロールバックされますでしょうか?loan.update()
メソッドが失敗した場合、update_book_count
もロールバックされますか?