【问题标题】:Django - How to allow users to enter decimals in scientific notation?Django - 如何允许用户以科学计数法输入小数?
【发布时间】:2011-04-06 12:12:15
【问题描述】:

我希望用户能够输入标准十进制值,例如 1.51,或以科学计数法输入值,例如 4.08E+13。

我在我的模型中设置了一个小数字段,但是当我尝试输入上述示例时,我收到了以下验证消息:

“确保不超过 3 位小数。”

旁注:

我确实注意到 Python 已经支持这种格式:

>>> from decimal import Decimal
>>> print Decimal("4.08E+13")
4.08E+13

所以也许在 Django 中设置一些东西不会太难?

【问题讨论】:

  • 您是否有意避免阅读此内容:docs.djangoproject.com/en/1.3/ref/models/fields/…
  • 4.08E+13 有两位小数,我最多允许三位。您是否故意避免阅读我的问题!
  • 4.08E+13 没有任何个小数位。但是,它确实有 14 位数字。
  • @Greg - 如果我错了,请纠正我,但 S. Lott 提供的链接不是直接带您了解如何设置 Django 以允许 X小数位数和最大位数?
  • 我按照这些说明进行操作。我尝试了各种方式的 decimal_places 和 max_digit 值。如果我将它们提高得非常高,它似乎接受了这个值,但随后给了我这个错误:“quantize result has too many numbers for current context”

标签: python django django-models decimal scientific-notation


【解决方案1】:

这看起来像一个 Django 错误,DecimalField.validate() 对于正指数是错误的:

>>> from django.forms import DecimalField
>>> f = DecimalField(max_digits=10, decimal_places=1)
>>> f.validate(Decimal('1E+2'))
Traceback (most recent call last):
...
ValidationError: [u'Ensure that there are no more than 1 decimal places.']

您可能想file a bug

【讨论】:

  • 谢谢。与此同时,我想我应该编写自己的自定义模型字段?
  • 这么多提交错误。我收到“提交被拒绝为潜在垃圾邮件(BlogSpam 说内容是垃圾邮件 (badip:state/blacklist.d/127.0.0.1))”
  • 如果您编写了一个不错的补丁(包括一个测试用例!)和一个清晰的错误报告,您可能会很幸运并很快将其提交。但是,如果您不想使用中继或等不及,我建议您继承 DecimalField 并覆盖 validate()。
  • 您必须注册才能绕过垃圾邮件过滤器。
  • 关于子类化的问题。我想覆盖models.DecimalField,但我看到的唯一DecimalField 类在forms/fields.py 中。这真的是我想要的吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-18
  • 2018-05-28
  • 1970-01-01
  • 1970-01-01
  • 2011-07-18
相关资源
最近更新 更多