2016-05-25 43 views
0

我已經創造了forms.py和老校友Django模板中使用models.py models.Model,的ModelForm(沒有任何幻想)Django的文本SmallIntegerField導致KeyError異常

如果用戶輸入文本在一個簡單的HTML表單數字字段和提交表單,服務器返回一個KeyError

實施例:下面的字段「高度」:

class DataRegistryPart2(models.Model): 
    height = models.SmallIntegerField(blank=True, null=True) 

將被顯示爲在模板中的HTML輸入:

<input id="id_height" name="height" type="number"> 

im使用定製驗證在forms.py:

... 
def clean(self): 
    cleaned_data = super(CreatePatient, self).clean() 
    height = cleaned_data["height"] # <-- This is where the KeyError happens! 

如果用戶輸入文本在所述輸入字段生成十進制數並提交的HTML形式,Django的返回一個KeyError異常。

如何防止發生這種情況(不使用try/catch)。

Thanx!

回答

1

如果在字段中輸入無效值,則該字段根據定義不清晰,因此它不會出現在cleaned_data;因此KeyError。

除非您需要此值與其他字段進行驗證,否則您應該在特定的clean_height方法中執行您正在做的任何操作;這隻會在值通過內置字段驗證時纔會調用。

+0

感謝您的回答!這聽起來像是一個非常糟糕的主意,那麼使用乾淨的功能呢 - 它很可能是用戶輸入無效的數據到崩潰系統的表單中。 也許我誤解了一些東西,但是我發現現在很難看到清理函數的用法。也許你可以詳細說明一下? – Vingtoft

+0

不,不是真的。正如我所說,這是爲了在不止一個領域進行驗證。在這種情況下,您可以使用'cleaned_data.get('fieldname')'來訪問一個潛在的缺失值,而不會觸發KeyError。 –

+0

謝謝你澄清。 – Vingtoft