2011-02-06 1 views
1

Windows 줄 끝자리는 실제로 두 문자 (\r\n)이기 때문에 max_length는이를 두 문자로 처리합니다. 나는 그들에게 한 인물로만 취급되기를 바란다.django - max_length 양식 유효성 검사를 수행 할 때 Windows 줄 끝 처리

이 문제를 해결하는 가장 좋은 방법은 무엇입니까? 나는 라인 엔딩을 변환하는 것이 가장 좋을 것이라고 추측하지만, 프로세스에서 어디에서 이것을 할 것인가?

답변

4

양식의 clean_<fieldname>() 메서드를 재정의하거나 더 일반적인 clean() 메서드를 재정 의하여 줄 끝 문자를 변환하려고합니다. 데이터를 정리하기 전에 장고는이를 파이썬으로 변환하여 유효성을 검사하므로 max_length 유효성 검사를 재정의 된 clean 메소드로 옮겨야합니다. 또한 "이 메서드는 아무것도 변경했는지 여부에 관계없이 정리 된 데이터를 반환해야합니다." 귀하의 경우에는

http://docs.djangoproject.com/en/dev/ref/forms/validation/

, 코드는 다음과 같습니다

from django import forms 
from string import replace 

class YourForm(forms.Form): 
    some_field = forms.CharField() 
    # Your fields here 

    def clean_some_field(self): 
     max_length = 50 
     data = self.cleaned_data["some_field"] 
     data = replace(data, "\r", "") 
     if len(data) > max_length: 
      raise forms.ValidationError("some_field is too long!") 
     return data 
+0

이 환상적입니다, 감사합니다! 나는 조금 어려움을 겪고있다. 필드가 지워지지 만 원시 데이터에서 유효성 검사가 수행됩니다. 'form.is_valid()'를 실행하면 모든 필드가 정리 된 후 폼에서 유효성 검사를 실행해야합니까? 아니면 다른 곳에서'is_valid()'를 실행해야합니까? – Acorn

+0

문제는'clean_ ()'이'max_length' 같은 것을 검증 한 후에 실행된다는 것입니다. 이것은'clean_ ()'에서 길이 유효성 검사를하고 필드에서'max_length'를 제거해야한다는 것을 의미합니다. 어쩌면 대답을 업데이트 할 수 있을까요? http://stackoverflow.com/questions/4914123/django-how-to-process-clean-a-field-before-validation – Acorn

+0

아, 네 말이 맞아. 나는 그것을 지적 해 주셔서 감사합니다. –

관련 문제