2011-04-06 102 views
1

我希望用户能够输入像1.51这样的标准小数值,或者用科学记数法(如4.08E + 13)输入一个值。Django - 如何让用户以科学记数法输入小数?

我成立了一个小数点场在我的模型,但是当我试图进入上面的例子中我得到这个验证消息:

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

旁注:

我也注意到了Python已经支持这种格式:

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

所以,也许也不会太硬Django中设置的东西了?

+1

您是否有意避免阅读此内容:http://docs.djangoproject.com/en/1.3/ref/models/fields/#django.db.models.DecimalField.decimal_places? – 2011-04-06 12:14:13

+0

4.08E + 13有两位小数,我允许多达三位。你有意避免阅读我的问题! – Greg 2011-04-06 12:26:33

+2

4.08E + 13没有*任何*小数位。但是,它有14位数字。 – cHao 2011-04-06 12:33:51

回答

2

这看起来像一个Django的bug,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

+0

谢谢。在此期间,我想我应该写我自己的自定义模型领域? – Greg 2011-04-06 14:38:16

+0

提交bug非常多。我得到了“拒绝提交作为潜在的垃圾邮件(BlogSpam说内容是垃圾邮件(badip:state/blacklist.d/127.0.0.1))” – Greg 2011-04-06 14:40:16

+1

如果你写了一个很好的补丁(包括一个测试用例!好运并迅速做出承诺。但是,如果您不想使用trunk或不能等待,我建议继承DecimalField并覆盖validate()。 – emulbreh 2011-04-06 14:42:56

相关问题