이미 검증 된 양식에 오류를 삽입 하시겠습니까?


97

form.Form사용자 입력 값을 확인한 후 추가 처리를 위해 별도의 (외부) 프로세스에 전달합니다. 이 외부 프로세스는 잠재적으로 값에서 추가 오류를 찾을 수 있습니다.

이러한 오류를 이미 검증 된 양식에 삽입하여 일반적인 양식 오류 표시 방법을 통해 표시 할 수있는 방법이 있습니까 (또는 더 나은 대체 방법이 있습니까)?

한 가지 제안은 양식 유효성 검사에 외부 처리를 포함하는 것이 었는데, 이는 외부 프로세스가 단순히 유효성을 검사하는 것 이상을 수행하기 때문에 이상적이지 않습니다.

답변:


92

Form._errors표준 사전처럼 취급 할 수 있습니다. ErrorList클래스 를 사용 하고 기존 목록에 오류를 추가 하는 것은 좋은 형식으로 간주 됩니다.

from django.forms.utils import ErrorList
errors = form._errors.setdefault("myfield", ErrorList())
errors.append(u"My error here")

그리고 당신은 비 필드 오류, 사용 추가하려는 경우 django.forms.forms.NON_FIELD_ERRORS(에 기본값을 "__all__"대신) "myfield".


2
"_errors"라는 이름이 폼 클래스 내부에 있어야한다는 것을 암시하기 때문에 이것은 약간 불쾌 해 보입니다. 이것이 Django에서 이것을 수행하는 표준 방법입니까? OP와 비슷한 상황에 있습니다. 사용자가 데이터베이스에서 고유해야하는 새 이름을 제공하는 양식이 있습니다. 충돌이 발생하면 오류와 함께 양식을 다시 보내고 싶지만 실제로 데이터베이스 삽입을 시도 할 때까지 알 수 없습니다. (이론적으로 검증자는 데이터베이스를 확인할 수 있지만 냄새가 나고 인종에 취약합니다.)
Weeble

1
@scompt : 감사합니다, 수정되었습니다. @Weeble : _errors이름에도 불구하고 공개 양식 API의 일부입니다. 문서 링크에 대한 insin의 답변을 참조하십시오.
John Millikin

18
이것은 믿을 수 없을 정도로 비 파이썬 적입니다. form.errors [ 'myfield']. append (my_error) 또는 form.add_error ( 'myfield', my_error)를 구현하는 것이 얼마나 어려웠습니까? 현재 구현에서 오류가 발생할 여지가 많습니다.
Michael

2
대부분 완료되었습니다. 한 가지 추가 참고 사항은 is_valid ()가 호출되지 않은 경우 form._errors = ErrorDict ()를 설정해야한다는 것입니다.
jacob

12
그들은 ... 당신의 조언을했다 모습처럼 - @Michael Form.add_error (필드, 오류) - 장고 데브
클레이튼


14

6
그리고 1.6 이후 개발 버전에서 그들은 add_error함수를 추가하고 있습니다 : docs.djangoproject.com/en/dev/ref/forms/api/…
brianmearns

이제 Django 1.7에는 공식 add_error 함수가 있습니다. docs.djangoproject.com/en/1.7/ref/forms/api/…
Danilo Cabello

0

특정 필드에 오류 추가 :

form.add_error('fieldName', 'error description')

** 비 필드에 오류 추가 **

form.add_error(None, 'error description')
#Only pass None instead of field name
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.