У меня есть метод сохранения из класса util
в моем приложении для библиотеки. В самостоятельной определено utils.py
:Django Atomic Transactions для связанных с методом транзакций
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
?