-
카테고리
-
세부 분야
풀스택
-
해결 여부
해결됨
ValidationError 일으킬 시 error code 제공은 필수적인가요?
22.03.15 22:33 작성 조회수 166
0
답변을 작성해보세요.
1
이진석
지식공유자2022.03.15
안녕하세요.
강의 내에서는 .code 속성에 대해서 다루지 않았습니다.
알려주신 공식문서에 다음 언급이 있습니다. // In order to make error messages flexible and easy to override, consider the following guidelines: // 에러메세지를 유연하게 정의할 수 있고, 에러메세지 내용을 재정의하기 쉽게 하기 위한 여러 방법 중에 code 속성 활용이 있다는 거죠.
ValidationError 예외에서 .message 속성과 .code 속성이 있는 데요. .code 속성은 옵션입니다. 폼/모델 Field 내의 유효성 검사에서만, .code 속성이 있을 경우, Field 내의 error_messages 사전에서 error_messages[code] 참조를 통해 에러메세지를 가져와서 .message 속성을 덮어쓰기 합니다. // 그러니 폼/모델 Field 구현 내의 유효성 검사가 아닌 폼 구현에서의 유효성 검사에서는 .code 속성이 의미가 없습니다.
- https://github.com/django/django/blob/3.0.14/django/forms/fields.py#L137
- https://github.com/django/django/blob/3.0.14/django/db/models/fields/__init__.py#L604
아래의 코드의 Post 모델을 통해 생성된 모델폼에서는 유효성 검사 에러메세지는 "초기 에러메세지"가 아니라, "테스트 에러메세지"가 됩니다. code 속성이 지정되었기에 message 속성으로 지정된 "초기 에러메세지"는 "테스트 에러메세지"로 덮어쓰기가 됩니다.
즉, 폼/모델 필드를 정의하실 경우나 새로운 필드를 직접 만드시는 경우에, 필드 구현 내에서 에러메세지를 정의하실 때, 알려주신 공식문서의 내용대로 error_messages 속성 정의 및 code 속성을 활용하여, default_error_messages 재정의를 통해 에러메세지 변경이 용이해지게 됩니다.
예를 들어, IntegerField에서 default_error_messages는 아래와 같고, code=invalid 상황에서 "Enter a whole number" 에러메세지가 번역이 되어 표현이 됩니다.
모델 필드를 정의할 때, 다음과 같이 error_messages 속성을 지정하여, 해당 필드에 한하여 에러메세지를 변경하실 수 있습니다.
좋은 질문 감사드립니다.
화이팅입니다. :-)
0
답변 2