在Djangomoney MoneyField上使用F表达式

2024-06-01 07:16:35 发布

您现在位置:Python中文网/ 问答频道 /正文

使用django1.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'

^{pr2}$

我还尝试了wallet.balance.amount = F("balance__amount") + 3,它不会立即抛出异常,但随后的wallet.save()失败,并返回{}。正确的方法是什么?在


Tags: djangofromimportdb定义表达式models条件
2条回答

你试过给它一个浮点数而不是一个整数吗?尝试:wallet.balance.amount = F("balance__amount") + float(3)

我不知道为什么他们的代码不自动尝试将整数转换成浮点数,如果这是它所需要的。在

因为django-money0.7.7支持所有基本的F对象操作。 它适用于django1.4+。在

相关问题 更多 >