2017-10-14 62 views
1

我有以下領域在我的Django模型:爲什麼輸入數字時django pgm崩潰超過DecimalField max_digits?

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引發以下錯誤:

InvalidOperation at /balancer/set_security_prices/2017-10-14 []

Request Method: POST Request

URL: http://localhost:8000/balancer/set_security_prices/2017-10-14

Django Version: 1.9.1 Exception Type: InvalidOperation Exception

Value: [] Exception

Location: /Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/db/backends/utils.py in format_number, line 200 Python Executable: /Library/Frameworks/Python.framework/Versions/3.5/bin/python3.5 Python Version: 3.5.1

的is_valid()檢查我之前做保存數據不收集的問題。這對我沒有意義。 Django不應該防止這種情況發生,還是必須添加try ...except代碼?

謝謝!通過瀏覽器生成

回答

1

您的第一個驗證錯誤,你應該爲最大長度,如果你想例如同樣的效果 添加驗證,輸入:

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

作品!雖然max的語法是'max':'999999'仍然不確定爲什麼Django會產生太多的小數位錯誤,但不會產生太多的位數錯誤。似乎應該。謝謝您的幫助! – Ben

+0

等一下,也許這個「步驟」就是把那個小數位錯誤拋到上面。好吧,現在我覺得我很好。謝謝! – Ben

+0

很高興爲您效勞。 –