为什么django pgm在输入的数字超过DecimalField max_位数时崩溃?

为什么django pgm在输入的数字超过DecimalField max_位数时崩溃?,django,django-models,django-forms,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;'})) (顺便说一句,文本对齐不起作用-我认为是另一个问题) 它在窗体中显示时工作。事实上,当我尝

我的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位小数时,表单会弹出一条消息:

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

Django抛出以下错误:

无效操作/平衡器/设定安全价格/2017-10-14 []

请求方式:POST请求

网址:

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

值:[]异常

位置:/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/db/backends/utils.py 格式为\u编号,第200行 可执行文件:/Library/Frameworks/Python.framework/Versions/3.5/bin/python3.5 Python版本:3.5.1

我在保存数据之前所做的is_valid()检查不会导致问题。这对我来说毫无意义。Django是否应该对此进行保护,或者我必须添加
try…除了
code


谢谢

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

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

作品尽管max的语法是“max”:“999999”仍然不确定为什么Django生成了过多的小数错误,而不是过多的数字错误。似乎应该这样。谢谢你的帮助!等等,也许这个“步骤”是把它丢到小数点后许多位的错误。好吧,我想我现在好了。谢谢很高兴帮助你。