Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
with transaction.atomic():
user1.update_balance(money1)
user2.update_balance(money2)
>>> entry1 = Entry.objects.get(pk=1)
>>> entry2 = Entry.objects.get(pk=1)
>>> entry1 is entry2
True
Profile.objects.\
filter(pk=self.pk)\
.update(balance=F('balance') + balance)
self.balance = F('balance') + balance
#… тут кто-то в другом процессе тоже обновил этот же баланс
Profile.objects.\
filter(pk=self.pk)\
.update(balance=F('balance') + balance)
def update_balance(self, balance):
Profile.objects.select_for_update().\
filter(pk=self.pk, balance=self.balance)\
.update(balance=F('balance') + balance)
def update_balance(self, balance):
Profile.objects.filter(pk=self.pk).update(balance=F('balance') + balance)
Модели Django и решение проблем с конкурентным доступом к данным