Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django-从F表达式获取值_Python_Django_Query Expressions - Fatal编程技术网

Python Django-从F表达式获取值

Python Django-从F表达式获取值,python,django,query-expressions,Python,Django,Query Expressions,我相信这应该很容易,但它提出了一些挑战,谷歌也没有提出任何建议 我有一个像这样的django模型: Affiliate->Account 其中帐户具有跟踪帐户余额的余额属性。因为它可以同时修改,所以我使用F()表达式来修改它 问题是。。。在给定的测试中,我试图将附属帐户.balance与预期值-1.00(十进制值)进行比较,但它不同,因为没有解析de F表达式: First differing element 12: # (yes... I'm comparing it within an ar

我相信这应该很容易,但它提出了一些挑战,谷歌也没有提出任何建议

我有一个像这样的django模型:
Affiliate->Account
其中帐户具有跟踪帐户余额的
余额
属性。因为它可以同时修改,所以我使用F()表达式来修改它

问题是。。。在给定的测试中,我试图将
附属帐户.balance
与预期值
-1.00
(十进制值)进行比较,但它不同,因为没有解析de F表达式:

First differing element 12: # (yes... I'm comparing it within an array)
Decimal('-1')
<CombinedExpression: F(balance) - Value(1.00)>
一些(可能)重要信息:

$ python3 -m django --version
1.10.5
我试过了

affiliate.account.balance.value()
affiliate.account.balance.getValue()
str(affiliate.account.balance)
repr(affiliate.account.balance)
Decimal(affiliate.account.balance)
但这些都没有预期的效果

所以。。。当我断言

self.assertEquals(Decimal(-1.00), affiliate.account.balance)
谢谢

编辑:

帐户模型

class Account(models.Model):
    affiliate = models.OneToOneField(Affiliate, on_delete=models.CASCADE)
    balance = models.DecimalField(_('Balance'), max_digits=20, decimal_places=2, default=Decimal(0.00))

您是如何获得您的
帐户的?您可能只需要在对象更新后刷新对数据库的引用。看

比如说

prevBal = account.balance
...charge({amount:...})
account.refresh_from_db()
newBal = account.balance
尽管说实话,即使在更新之后,我仍然对你的设置感到困惑

访问
十进制
值并在测试中验证<代码>科目。余额
应返回十进制值。使用
isinstance
验证类型是否为
Decimal
。从这里可以看出,您尝试的方法是正确的,因为您只是将一个十进制值与一个十进制值进行比较。我不明白这与使用
F
有什么关系


祝你好运

您是如何在您的
账户
模型上声明您的
余额
字段的?请发布您账户模型的代码好吗?这将使回答这个问题变得容易得多。我没有马上把它贴出来,因为我觉得它很琐碎。谢谢你,尼克!你是对的!由于我有这个参考模型
Affiliate->Account
,并且余额属性在
Account
中,在执行
Affiliate.refresh\u from_db()
之后,余额属性没有被刷新,但是执行
Affiliate.Account.refresh\u from_db()
的操作就足够好了。。。
prevBal = account.balance
...charge({amount:...})
account.refresh_from_db()
newBal = account.balance