使用Django 1.8.5和django-money 0.7.4,我想使用F表达式更新MoneyField以避免可能的竞争条件。我们假设我将钱包定义为
from moneyed.classes import Money
from django.db.models import F
from django.db import models
from djmoney.models.fields import M0oneyField
class Wallet(models.Model):
balance = MoneyField(max_digits=5, decimal_places=2, default_currency='EUR')
以下用于充值钱包的代码因AttributeError: 'CombinedExpression' object has no attribute 'children'
amount_to_add = Money(amount="3", currency="EUR")
wallet = Wallet(balance=10)
wallet.balance = F('balance') + amount_to_add
我还尝试了wallet.balance.amount = F("balance__amount") + 3
,它不会立即抛出异常,但随后的wallet.save()
会因TypeError: a float is required
而失败。这样做的正确方法是什么?
答案 0 :(得分:2)
自django-money
0.7.7起支持所有基本F
对象操作。
它适用于Django 1.4 +。
答案 1 :(得分:0)
你试过给它一个浮点而不是一个整数吗?尝试:wallet.balance.amount = F("balance__amount") + float(3)
我不确定为什么他们的代码不会自动尝试将整数转换为浮动符号(如果它是它所需要的。)