Python 在django money MoneyField上使用F表达式
使用Django 1.8.5和Django money 0.7.4,我想使用F表达式更新MoneyField,以避免可能的竞争条件。假设我的钱包定义为Python 在django money MoneyField上使用F表达式,python,django,django-models,Python,Django,Django Models,使用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): b
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”对象没有属性“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\uu amount”)+3
,它不会立即抛出异常,但随后的wallet.save()
失败,出现TypeError:需要浮点数
。正确的方法是什么?您是否尝试过给它一个浮点而不是整数?试试:wallet.balance.amount=F(“余额金额”)+浮动(3)
我不知道为什么他们的代码不自动尝试将整数转换为浮点数(如果需要的话)。因为
django money
0.7.7支持所有基本的F
对象操作。
它适用于Django 1.4+。感谢您的回答,Electronitro,我确实尝试添加了一个浮点,但它返回相同的
类型错误:需要一个浮点。此外,MoneyField的全部要点是将所有操作保留在十进制上,因此这个错误非常模糊。。。