【问题标题】:django combine models.DecimalField with forms -> error: quantize result has too many digits for current contextdjango 将 models.DecimalField 与表单结合起来-> 错误:量化结果对于当前上下文有太多数字
【发布时间】:2010-01-12 19:04:48
【问题描述】:

我想将模型小数字段与表单选择字段结合起来。

模型中的字段:

sum = models.DecimalField(max_digits=2, decimal_places=2)

表单中的字段:

sum = forms.ChoiceField(choices=WORK_HOUR_CHOICES, label='Sum Working Hours', required=True)

选择:

WORK_HOUR_CHOICES = (
    (0, '0'),
    (0.5, '0.5'),
    (1, '1'),
    (1.5, '1.5'),
    (2, '2'),
    (2.5, '2.5')
)

但是当我想存储一个小数位的值时,我总是会收到这个错误:

quantize result has too many digits for current context

当我保存 0 或 1 时,它工作正常。

怎么了?

【问题讨论】:

    标签: python django


    【解决方案1】:

    这只是一个猜测,但我敢打赌你需要在里面输入小数:

    WORK_HOUR_CHOICES = (
        (Decimal("0"), '0'),
        (Decimal("0.5"), '0.5'),
        (Decimal("1"), '1'),
        (Decimal("1.5"), '1.5'),
        (Decimal("2"), '2'),
        (Decimal("2.5"), '2.5')
    )
    

    您不能使用浮点常量初始化 Decimal,您必须使用字符串。

    >>> from decimal import Decimal
    >>> Decimal(1.5)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "C:\software\Python25\lib\decimal.py", line 578, in __new__
        "First convert the float to a string")
    TypeError: Cannot convert float to Decimal.  First convert the float to a string
    >>> Decimal("1.5")
    Decimal("1.5")
    

    【讨论】:

    • 谢谢,这就是问题所在。我试过了,它有效。此外,您指出了正确的方向,我在模型字段中切换到 Float,因为我不需要小数。使用浮动,它适用于初始设置。
    • "你不能用浮点常量初始化 Decimal,你必须使用字符串。"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-10
    • 2018-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-13
    相关资源
    最近更新 更多