【问题标题】:Django ORM - assigning a raw value to DecimalFieldDjango ORM - 将原始值分配给 DecimalField
【发布时间】:2010-12-01 04:40:01
【问题描述】:

编辑!!! - 当我创建 new 对象时,将值转换为字符串似乎可以正常工作,但是当我尝试编辑现有对象时,它不允许这样做。

所以我的一个 Decimal(3,2) 模型中有一个小数字段

当我查询所有这些对象并尝试设置此字段时:

fieldName = 0.85

fieldName = .85

它会发出嘶嘶声,“无法将浮点数转换为 DecimalField,请先尝试转换为字符串”...

那么我做:

fieldName = str(0.85)

同样的错误。

我什至尝试过:

fieldName = "0.85"

同样的错误。我在这里遇到了某种框架错误,还是什么?请注意,当我实际进入 Django Admin 并手动编辑对象时,它工作正常。

我在 Python 2.6 上运行 Django 1.1

【问题讨论】:

    标签: python django django-models casting django-orm


    【解决方案1】:
    from decimal import Decimal
    object.fieldName = Decimal("0.85")
    

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

    【讨论】:

      【解决方案2】:

      Django DecimalField 是“...由 python Decimal 实例表示。”你可以试试:

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

      行为也可能因您使用的数据库后端而异。使用 sqlite,我可以将字符串值分配给新对象和现有对象中的 DecimalFields 而不会出错。

      【讨论】:

      • 刚看到这个。似乎使用 sqlite 后端放入模型实例的表单输入将保留为 unicode 字符串,这会阻止您对它们进行任何数学运算。
      猜你喜欢
      • 1970-01-01
      • 2010-11-12
      • 1970-01-01
      • 2020-10-27
      • 2019-04-03
      • 2022-08-18
      • 2020-10-21
      • 1970-01-01
      • 2012-08-12
      相关资源
      最近更新 更多