输入数字时为什么django pgm崩溃超过DecimalField max_digits?

时间:2017-10-14 15:37:21

标签: django django-models django-forms

我的Django模型中有以下字段:

price = models.DecimalField(max_digits=8, decimal_places=2, default=0)

以及我的表单中的以下代码:

price = forms.DecimalField(widget=forms.NumberInput(attrs={'step': '0.01', 'text-align': 'right;'}))

(顺便说一下,文本对齐不起作用 - 我认为不同的问题)

在表单中显示时有效。事实上,当我尝试使用超过2个小数位时,表单会弹出一条消息:

enter image description here

但是,如果输入太多数字,如:

enter image description here

Django抛出以下错误:

  

/ balancer / set_security_prices / 2017-10-14中的InvalidOperation   []

     

请求方法:POST请求

     

网址:http://localhost:8000/balancer/set_security_prices/2017-10-14

     

Django版本:1.9.1异常类型:InvalidOperation异常

     

价值:[]例外

     

位置:/ Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/db/backends/utils.py   在format_number中,第200行Python   可执行文件:/ Library / Frame /Python.framework / Version / 3.5 / bin / python3.5   Python版本:3.5.1

在保存数据之前我执行的is_valid()检查没有捕获问题。这对我来说没有意义。不应该Django防止这种情况或者我必须添加try ...except代码吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

浏览器生成的第一个验证错误,如果您想要相同的效果,则应该为输入添加最大长度验证 例如:

price = forms.DecimalField(
     widget=forms.NumberInput(
         attrs={'step': '0.01', max='999999', 'text-align': 'right;'})
         #                     ^^^^^^^^^^^^^
)