2013-12-10 190 views
0
class CustomerForm(forms.ModelForm): 

    class Meta: 
     model = Customer 


class Customer(models.Model): 
    balance = models.FloatField(default = 0.0) 

form = CustomerForm(request.POST) 
if form.is_valid(): 
    # is FALSE 

Django表單驗證錯誤,當我提交表單沒有balance場,我得到一個驗證錯誤說,餘額字段是必需的。這是爲什麼?爲默認值

回答

2

您可以幫助將clean_FIELDNAME方法添加到默認情況下返回0.0的表單中。 在表單清理過程中調用此方法。

class CustomerForm(forms.ModelForm): 
    balance = models.FloatField(required=False) 

    def clean_balance(self): 
     if not 'balance' in self.cleaned_data or self.cleaned_data['balance'] is None: 
      return self._meta.model._meta.get_field('balance').default 
     else: 
      return self.cleaned_data['balance'] 

另一種方式來處理,這是使用形式的清潔方法踢餘額字段出cleaned_data而讓模型設置的默認值。

class CustomerForm(forms.ModelForm): 

    class Meta: 
     model = Customer 

    def clean(self): 
     if 'balance' in self.cleaned_data and self.cleaned_data['balance'] is None: 
      del self.cleaned_data['balance'] 
     return self.cleaned_data 


class Customer(models.Model): 

    balance = models.FloatField(blank=True, null=False, default=0.0) 
+0

唯一的問題是需要在clean方法中定義默認值,並且不要回退到model中設置的默認值。 – Rohan

+0

將clean_方法更改爲使用模型的默認值。 – kanu

0

required=False足以寫在forms.py不檢查balance場。

也把blank=Truedefault價值balance model

沒有必要在這裏使用clean方法。因爲每當您尋找自定義驗證時都會使用clean

沒有爲在Django表單自定義驗證二方法 - :

1)你可以使用clean方法。

2)您可以使用forms.regexfield