2013-09-30 15 views
4

我有一個獨特的問題。 我在我的floatField中放置了「$ 90」的值。 我認爲它應該在模型中清理並存儲爲「90.0」。Django ModelForm float字段不調用Clean_Field方法

但是當我輸入「$ 90」並調用clean_filed方法時,它不會調用那個乾淨的方法。 但是當我在clean(self)方法中應用斷點並嘗試獲得它的值時,它說None。

請幫我一把。這是我的代碼。

Model 
class Project(models.Model): 
foo = models.FloatField("foo", 
     null=True, blank=True 
    ) 


forms 
widgets = { 
     'foo': forms.TextInput(attrs={'currency': 'true'})} 

    def clean_foo(self): 
     value = self.cleaned_data.get('foo') 
     print value # i get NONE here............. 
     return value 
+1

您是否嘗試過其他輸入?像「90」沒有「$」標誌或已經乾淨的「90.0」?嘗試看看它是否真的是清潔問題,而不是別的 – yuvi

回答

13

clean_<field>該鉤在形式API是執行額外驗證。它在該字段調用其乾淨方法後調用。如果該字段不考慮輸入有效,則不調用clean_<field>。這說明在自定義驗證文檔https://docs.djangoproject.com/en/stable/ref/forms/validation/

對於任何一個領域,如果Field.clean()方法提出了一個ValidationError,任何特定領域清潔方法不叫。但是,所有剩餘字段的清理方法仍然執行。

在你的情況下,因爲$90不驗證作爲浮動它不會被調用。相反,您應該做的是創建FloatField的子類,它在將輸入驗證爲浮點之前清理輸入(去除$等)。