[DRF] Serializer2

강현구·2022년 2월 17일
0

Django

목록 보기
11/12

Serializer

serializer의 parameter로 들어가는 형태

serializer = TestSerializer(test)  # test -> instance
serializer = TestSerializer(data=request.data)
serializer = TestSerializer(test, data=reqeust.data)
serializer = TestSerializer(test, reqeust.data)
serializer = TestSerializer(reqeust.data)     # Error

instance가 먼저 parameter로 들어가면 request.data 형태로 parameter로 입력 가능, request.data만 쓸 경우에는 data keyword로 넘겨줘야 한다.

data 값이 주어지면 다음과 같은 과정을 거치게 됨
1. serializer.is_valid()가 호출
2. serializer.initial_data에 data 값을 넣어줌
3. 유효성 검증을 통과 후, serializer.validated_data에 data 값을 넣어줌
4. 이후 serializer.save()가 호출될 때, data 값이 저장됨

serializer.errors : 유효성 검사에서 발생한 오류가 저장됨
serializer.data : 유효성 검사에서 통과된 인스턴스 값이 dictionary로 저장됨

  • SerializerMethodField
    SerializerMethodField()를 사용하여 field를 커스텀 할 수 있음
    SerializerMethodField()는 read-only field 로 값을 저장하거나 수정할 때는 사용되지 않고 조회할 때만 사용
    methodname으로 해당 필드값에 대해 정의하는 함수의 이름을 넘겨줄 수 있음
    default로는 get
    <field_name>로 정해짐

  • serializer.save()

def save(self, **kwargs):
    pass

유효성을 통과한 validated_data와 kwargs dict가 합쳐져서 DB에 저장됨
이 때, self.instance 값에 따라 저장하는 방식이 다름

self.instance 값이 없을 때: create()를 통해 저장
self.instance 값이 있을 때: update()를 통해 저장

출처 : velog

profile
한걸음씩

0개의 댓글