2013-08-28 1 views
6

다른 필드를 참조해야하는 serializer에서 사용자 지정 필드 수준 유효성 검사를 수행하고 있습니다.Django REST 프레임 워크 : validate_ <fieldname>과 실제로 다른 점은 무엇입니까?

Validation documentation의 예를 보면 validate_<fieldname> 또는 validate을 사용해야하는지 명확하지 않습니다. 두 가지 모두 attrs 사전이있는 것 같습니다. 따라서 validate에 대한 설명에서 여러 필드에 액세스해야한다는 것을 나타내더라도 validate에서 다른 필드를 쉽게 참조 할 수 있습니다. validate_<fieldname> 그렇다면 왜 두 가지 옵션이 있습니까? 내 경우에는 어떤 옵션을 사용하는 것이 맞습니까?

답변

17

validate_<foo>() 안에 ValidationError을 올리면 필드 오류가 발생합니다. 비 필드 오류가 발생하는 ValidationErrorvalidate() 내부에 올리기

{'foo': ['Not a fooish value.']} 

.

{'non_field_errors': ['Foo and bar are not compatible.']} 

왜 두 가지 옵션이 있습니다?

부분적으로 위의 이유로 인해, 그리고 부분적으로는 serializer API가 가능한 경우 Django의 양식 API를 반영하기 때문입니다. 필요한 경우 차이점이 있지만 validatevalidate_<foo> 스타일이 비슷합니다.

내 경우에는 어떤 옵션을 사용하는 것이 맞습니까?

오류 메시지가 더 적절하다고 판단되면 사용자가 전화를 걸 수 있습니다.

+2

Neil -'attrs'는 유효성이 검사되고 완전한 개체 인스턴스로 복원되기 전에 사전으로서의 serializer에 대한 입력입니다. 내 머리 꼭대기에서 나는 당신이 그것을 접근하고있는 지점에서 이미 검증 된 입력 중 일부와 관련이있을 것이라고 생각한다. –

+0

고마워요 @ 톰. validate_foo에 추가 매개 변수를 전달할 수있는 방법이 있습니까 (예 : 개체의 ID)? – Neil

+1

업데이트의 경우 'self.object'는 인스턴스에 대한 참조를 보유합니다. –