@IvanOne

Django F + update не обновляет поле?

Django 1.8, база postgre.

Есть модель Wallet с полем баланс, и есть метод который его обновляет
def update_balance(self, amount):
        Wallet.objects.filter(pk=self.pk).update(balance=models.F("balance")+amount)
        return

Создаю кошелек self.wallet = Wallet.objects.create(user=self.user, currency=self.currency, balance=10000)
тест:
def test_change_wallet_balance(self):
        amount = 5000
        self.wallet.update_balance(amount)
        self.assertEqual(self.wallet.balance, 15000)

Получаю ошибку
self.assertEqual(self.wallet.balance, 15000)
AssertionError: Decimal('10000') != 15000
поле balance является decimal field
Как правильно реализовать метод?
  • Вопрос задан
  • 528 просмотров
Решения вопроса 1
Вам нужно вот это https://docs.djangoproject.com/en/1.8/ref/models/i...
У вас есть экземпляр модели(представление в виде объекта питона записи из бд), когда вы делаете update, вы обновляете данные в самой бд, экземпляр модели при этом каким был таким и остался.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
sim3x
@sim3x
self.assertEqual(self.wallet.balance, Decimal(15000))


Надеюсь кошелек просто евфемизм и не имеет отношения к деньгам
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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