2012-09-05 3 views
0

django의 내장 유효성 검사기는 공백 만 필드에 입력하는 경우에도 허용합니다. 공백 만 입력하면 유효성 검사 오류가 발생하는 유효성 검사를 원합니다. 나는 다음과 같은 필드를 가지고 있습니다 :정리 필드에 유효성 검사 포함 -Django

외부 유효성 검사기를 사용하는 것, 즉 이와 같은 기능을 작성하는 것입니다. 그것은 form.clean을 사용하여 수행 할 수 있다면

def validate_spaces(value): 
    if value.strip() == '': 
    raise ValidationError(u"You must provide more than just whitespace.") 

, 나는 외부의 어떤 추가 기능을 작성하지 않고, 방법) (예를 생각했다. 어떤 도움을 많이 주시면 감사하겠습니다.

당신은) (이 방법 form.clean 사용자 지정 동작을 추가 할 수 있습니다

답변

2

: 자동 검증의 Type을 가져옵니다 필드의 유형을 만들려면, 그러나

class YourForm(forms.Form): 
    # Everything as before. 
    ... 

    def clean_name(self): 
     data = self.cleaned_data['name'] 
     if data.strip() == '': 
      raise forms.ValidationError(u"You must provide more than just whitespace.") 

     # Always return the cleaned data, whether you have changed it or 
     # not. 
     return data 

, 당신은 같은 새로운 클래스를 추가 당신은 일반적으로 forms.CharField를 사용하는 것처럼이

class NoSpacesCharField(forms.CharField): 
    def validate(self, value): 
     # Use the parent's handling of required fields, etc. 
     super(NoSpacesCharField, self).validate(value) 

     if value.strip() == '': 
      raise ValidationError(u"You must provide more than just whitespace.") 

그런 다음 NoSpacesCharField 사용합니다.

저는이 코드를 테스트 할 수있는 위치에 있지 않으므로 거기에 이상한 부분이있을 수 있습니다. Django의 폼 유효성 검사에 대한 자세한 내용은 https://docs.djangoproject.com/en/dev/ref/forms/validation/

+0

감사합니다. 첫 번째 솔루션은 나에게 잘 맞았습니다. 이제 더 많은 필드에 대한 유효성 검사를 연장해야만합니다. 직접 반복해야합니까? 아니면 쉬운 방법이 있습니까? 약. –

+1

사용자 정의 필드 유형을 작성한 경우 이와 같이 유효성을 검사하는 필드가 필요한 곳이면 어디서나 사용할 수 있습니다. 이것이 바로 두 번째 코드입니다. (방금 고쳐 준 슈퍼 콜에 실수가있었습니다). 그렇게하면 유효성 검사 코드를 반복하지 않고'name = NoSpacesCharField (max_length = 200)'및'anotherField = NoSpacesCharField (max_length = 100)'등을 사용할 수 있습니다. –

관련 문제