S
Запись 1 Лок замена анлок,
Запись 2 Лок замена анлок,
А надо чтоб прошло одной зэтранзакцией
Size: a a a
S
S
S
ДШ
ДШ
S
S
ДШ
S
S
ДШ
S
S
ДШ
select_for_update
нужно сделать такEntry.objects.select_for_update().filter(id__in=[acc_from_id, acc_to_id])?
ДШ
ДШ
S
select_for_update
нужно сделать такEntry.objects.select_for_update().filter(id__in=[acc_from_id, acc_to_id])?
ДШ
ДШ
ДШ
@transaction.atomic()
def transfer_currency(account_from_id, account_to_id, value):
accounts = Account.objects.select_for_update().filter(id__in=[account_to_id, account_from_id]).all()
if accounts[0].id == account_from_id:
account_from = accounts[0]
account_to = accounts[1]
else:
account_from = accounts[1]
account_to = accounts[0]
if account_from.balance < value:
raise InvalidTransferException('Insufficient funds on the account')
account_from.balance = F("balance") - value
account_to.balance = F("balance") + value
account_from.save()
account_to.save()