Django ORM - 给DecimalField赋值原始值

3 投票
2 回答
4914 浏览
提问于 2025-04-15 14:34

编辑!!! - 当我创建一个对象时,把值转换成字符串似乎没问题,但当我尝试编辑一个已经存在的对象时,就不行了。

我在我的一个模型里有一个小数字段,格式是Decimal(3,2),意思是这个字段最多可以有3位数字,其中2位是小数。

当我查询到这些对象并尝试设置这个字段时:

fieldName = 0.85

或者

fieldName = .85

它就会报错,提示“无法将浮点数转换为DecimalField,先试着转换成字符串”...

所以我就这样做:

fieldName = str(0.85)

结果还是同样的错误。

我甚至尝试了:

fieldName = "0.85"

还是同样的错误。我是不是遇到什么框架的bug了,还是怎么回事?注意,当我实际进入Django管理后台手动编辑这些对象时,一切都正常。

我在使用Django 1.1和Python 2.6。

2 个回答

3

Django中的DecimalField是用一个Python的Decimal实例来表示的。你可以尝试这样做:

>>> obj.fieldName = Decimal("0.85")

而且,具体的表现可能还会根据你使用的数据库类型有所不同。比如在sqlite中,我可以在新建和已有的对象中给DecimalFields赋值字符串,而不会出错。

11
from decimal import Decimal
object.fieldName = Decimal("0.85")

或者

f = 0.85
object.fieldName = Decimal(str(f))

撰写回答