Задать вопрос
@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 все происходит, мне же нужно проверять на отрицательное значение. Что можете посоветовать?
  • Вопрос задан
  • 294 просмотра
Подписаться 2 Оценить 4 комментария
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Python-разработчик
    10 месяцев
    Далее
  • Нетология
    Python-разработчик: расширенный курс + нейросети
    12 месяцев
    Далее
  • Компьютерная академия «TOP»
    Разработка на Python
    1 год
    Далее
Пригласить эксперта
Ваш ответ на вопрос

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

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