@IvanOne

Конкурентные запросы в django?

Всем привет! Подскажите решение. Есть модель Profile с полем balance, который хранится в базе в decimal.
У модели Profile есть метод который изменяет баланс:
def update_profile(self, amount):
      self.balance += amount
      if self.balance < 0:
          return False
      else:
          self.save(update_fields=["balance"])
          return True

Насколько я понимаю в случае если будет конкурентный запрос, то значение будет записано не верно. Читал про select_for_update, но насколько я понял его можно использовать только с транзакциями. Пробовал тестировать этот метод в TestCase и TransactionTestCase получал ошибку:
TransactionManagementError: select_for_update cannot be used outside of a transaction.
Еще видел решение через объект F но там сразу в методе update все происходит, мне же нужно проверять на отрицательное значение. Что можете посоветовать?
  • Вопрос задан
  • 288 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы