get_serializer()와 serializer.save()의 instance
get_serializer() 에 들어가는 instance는 serializer의 update() 메서드를 불러오고 updata할 대상을 가리키게 된다. serializer.save()로 넘기는 정보는 클라이언트에서 넘어온 정보가 아니라 서버 측에서 추가로 넘기는 정보이다.
따라서 get_serializer()로 넘기는 정보는 검증 과정을 거쳐서(검증 메서드 통과 후) validated_data에 들어가지만, save()에 넘기는 추가 인자들은 클라이언트에서 넘어온 정보가 아니므로 검증을 거치지 않는다. 다만 똑같이 validated_data에 추가된다. 검증을 거치지 않은 추가적인 정보도 validated_data에 포함된다는 것이 의미적으로는 약간 모순적이다.
-> Serializer 안에서 validated_data에 접근할 때, create()나 update()를 Override 하면서 기본 인자로 받아오는 validated_data에 접근하여 데이터를 조회해야한다. Serializer 자체의 self.validated_data에 접근하면 save() 메서드에 추가로 넘긴 인자값은 찾아오지 못한다.
get_object_or_404
어떤 객체가 있는지 확인하고 없으면 바로 404 에러를 반환한다. 그런데 일반적으로 404 에러는 Not Found로, 서버 내 클라이언트가 요청한 URL 매칭 정보가 없을 때 나는 에러이다. 다시 말해, get_object_or_404()를 사용한다면 따로 에러 메시지를 설정하지 않았을 때 get_object_or_404() 때문에 난 에러인지, URL 매칭 에러로 인한 것인지 모두 다 살펴봐야한다.
'Programming-[Backend] > Django' 카테고리의 다른 글
[TIL] Django ModelSerializer의 field, validate()의 data (0) | 2022.09.21 |
---|---|
[TIL] 파이썬 리턴타입 힌트로 속성 탐색, unittest.mock의 @patch (0) | 2022.09.14 |
[작성중]Django REST framework 공식문서: 3. Serializer - ModelSerializer (0) | 2022.09.08 |
Django REST framework 공식문서: 2. Serializer - Validation과 Data 접근 (0) | 2022.09.02 |
[TIL] django 테스트 - subTest 활용하기, 인스턴스 field update 하기 (0) | 2022.08.23 |