2012-11-09 3 views
0

저는 사용자 정의 ModelForm과 사용자 정의 유효성 검사를 기반으로 formset을 작성하고 있습니다.Django Fomset is_valid()가 오류없이 실패합니다.

문제는 유효성 검사가 오류없이 실패하는 것입니다.()

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는 아무것도 보여주지 : 여기

은 ModelForm 및 해당 formset 정의입니다.

+4

'non_form_errors'를 원하셨습니까? formset'clean'에'ValidationError'를 발생 시키면 non_form_errors가 아닌'non_form_errors'에 저장됩니다. –

+0

네, 맞아요. 이제 "Bearing is not !!!"라는 메시지를 보냅니다. int를 전달하면 모델은 다음과 같습니다. bearing = models.DecimalField (max_digits = 6, decimal_places = 2, null = True) 무엇이 문제인지 모르겠지만 이제는 테스트 만하고 있습니다. 미래에는 십진수 값을 사용할 것입니다 ... –

답변

0

누락, 나는에서 말한대로 오류를 반환하는 잘못된 방법을 사용했다 마크 라빈. 모든

그러나 이상은

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

는 항상 false를 반환하는 것입니다. 올바른 조건은 다음과 같습니다.

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

모두에게 감사드립니다!

1

당신은 Raunak 아가 왈에서 말했듯이 나는 형태의 검증에

return self 

누락 된, 그래서 반환 cleaned_data

관련 문제