2012-11-09 89 views
0

我正在構建基於自定義ModelForm和自定義驗證的formset。Django Fomset is_valid()失敗,沒有錯誤

問題是驗證失敗,沒有錯誤。

這是自定義的ModelForm和表單集:

class AlternateFloorForm(ModelForm): 
     class Meta: 
       model = Floor 
       exclude = ('id_edificio', 'numero_di_piano', 'link', 'id') 

       widgets = { 
         'bearing' : HiddenInput(), 
         'zoom_on_map' : HiddenInput(), 
         'posizione_immagine' : HiddenInput(), 
       } 

class BaseAlternateFloorFormSet(BaseFormSet): 

     def clean(self): 
       if any(self.errors): 
         return 

       for i in range(0, self.total_form_count()): 
         form = self.forms[i] 
         bearing = form.cleaned_data.get('bearing', None) 
         if (bearing != None) or (bearing < 0) or (bearing > 360): 
           raise forms.ValidationError("Bearing is not correct!!!") 

我都只有一個形式也試過,但is_valid()始終爲假,並field.errors field.non_field_errors什麼都不顯示。

+4

您的意思是'non_form_errors'?如果在formset「clean」中引發'ValidationError',那麼它將被放置在'non_form_errors'而不是'non_field_errors'中。 –

+0

好吧,你是對的!現在它發出「軸承不正確!!!」 我傳遞一個整數和模型是: bearing = models.DecimalField(max_digits = 6,decimal_places = 2,null = True) 我不知道什麼是問題,現在我只測試,但將來我會使用十進制值... –

回答

0

所以,我錯過了

return self 
在表單驗證

,從Raunak阿加瓦爾說,我用不正確的方法對來自告訴返回錯誤Mark Lavin。

但在所有的是,

if (bearing != None) or (bearing < 0) or (bearing > 360): 

將返回始終爲false。這是正確的條件:

if (bearing == None) or (bearing < 0) or (bearing > 360): 

感謝所有!

1

你缺少回報cleaned_data