我有具有许多与十进制值的字段,以及例如模型类定义看起来像一个Django模型WalletJournal:Django的对象获取
balance = models.DecimalField(max_digits=20,decimal_places=2)
相应的MySQL列定义为:
`balance` decimal(20,2) NOT NULL,
而当通过它的id检索行并返回余额时,它看起来是正确的。
>>> WalletJournal.objects.get(id=855).balance
Decimal('1295599062.45')
>>>
我试图使用get_or_create添加条目,并保留副本到最低限度,但我看到上小数的得到一些非常STANGE行为。试图匹配视图字符串或十进制不返回任何结果:
>>> WalletJournal.objects.get(balance='1295599062.45')
DoesNotExist: WalletJournal matching query does not exist.
>>> WalletJournal.objects.get(balance=Decimal(str('1295599062.45')))
DoesNotExist: WalletJournal matching query does not exist.
但是,如果我符合使用__iexact
我得到正确的结果:
>>> WalletJournal.objects.get(balance__iexact='1295599062.45')
<WalletJournal: joeb - 1XXXX00 - Acyclic Tau(9XXXX307) - Repair Bill(2013-11-30 15:55:01)>
我不相信__iexact是不是一个完美的解决方案,如果有人可以建议我做错了什么,这将是非常有益的。
我目前正在运行Django 1.6和Python 2.6.5。 MySQL服务器版本:5.1.72-0ubuntu0.10.04.1(Ubuntu的)
使用connection.queries
我可以从各种报表获取请参见下面的查询结果:
__iexact --> `balance` LIKE '1295599062.45' : Matches
__exact --> `balance` = '1295599062.45' : No Match
str --> `balance` = '1295599062.45' : No Match
Decimal(str( --> `balance` = '1295599062.45' : No Match
Raw SQL --> `balance` = 1295599062.45 : Matches
难道我做错了什么与比较?
您正在使用什么数据库? –
MySQL服务器版本:5.1.72-0ubuntu0.10.04.1 – ModulusJoe
是否更改了max_digits和decimal_places的值?另外,sql_mode的值是多少?我正在浏览http://dev.mysql.com/doc/refman/5.1/en/precision-math-expressions.html,看看是否会发生一些奇怪的事情,但我没有看到会发生什么情况。 –