2009-05-07 2 views
2

내가장고 검증 배열

rf['email'].errors 

으로 사용하고 내가 오류의 배열을하는 데 사용할 수 있습니다, 문서 말했다.

[str(e) for e in rf['email'].errors] #give me ["<django.utils.functional.__proxy__>"] 

repr 또는 str - 이는 ul 또는 배열 문자열을 제공합니다.

그래서 repr과 eval을 함께 사용했을 때만 작동했습니다. 하지만 나는 그 어리석은 해결책을 생각한다.

eval(`rf['email'].errors`) 
+0

그냥 몇 해명 : 1)는 장고 양식 RF인가? 그리고 rf [ 'email'] django FormField? 2) 얻으려는 결과는 무엇입니까? 오류에 대한 HTML 문자열입니까? 또는 다른 것? –

+0

1. rf는 양식입니다. 2. rf [ 'email']은 FormField입니다. 3. json을 달성하려고합니다. 검증을 위해 양식을 사용합니다. –

답변

2

출력에 따라 몇 가지 옵션이 있습니다. ,

list_of_error_texts = [unicode(e) for e in rf['email'].errors] 

이 (장고의 프록시 객체가 유니 코드로 응답하는 방법을 구현합니다.)

옵션이 텍스트로 ErrorList을 얻을 :

옵션 중 하나는 데이터를 변환하는 유니 코드 생성자를 사용합니다.

print rf['email'].errors.as_text() 
* My error one 
* My error two 

옵션 세 가지를 사용 장고의 force_unicode 기능 :이 개행 문자가 앞에 별표가 각 라인, 오류 텍스트의 구분 된 목록 생성합니다. 이 unicode 유사하지만 몇 가지 추가 안전 기능을 가지고 : 당신이 괜찮다면,

from django.utils.encoding import force_unicode 
list_of_error_texts = [force_unicode(e) for e in rf['email'].errors] 
+0

문서에서 설명하는 동작이 작동하지 않는 이유와 그 이유를 알고 있습니까? – Tiago

+0

docs는 필드 오류를 반복 할 수 있다고 약속하지만 docs (AFAICT)의 유일한 예제는 OP로 작성된 Python이 아니라 템플릿에 있습니다. rf [ 'email']에서 나온 ErrorList를 반복 할 때 일련의 ValidationError 객체를 얻습니다. Django의 템플릿 기반 구조는 force_unicode()를 호출합니다. 먼저 '__unicode__'메소드가 있는지 확인합니다. 그것들이 있기 때문에, 그것은 OP의 예제의 str()보다는 오히려 호출됩니다. 따라서 문서의 동작이 작동하지 않는다고 말하지는 않을 것입니다. 예제에는 OP의 시나리오가 포함되어 있지 않습니다 .-) –