DRF Serializer 설정

·2022년 6월 19일
0

DRF-serializer

목록 보기
3/3
post-thumbnail

Serializer는 Client로부터 전달 받은 input을 parsing, normalize하고 검증하여 Django Model까지 전달하는 역할, 그리고 역순으로 Client까지 전달하는 역할도 담당한다. DRF에서는 Serializer를 쉽게 구성할 수 있도록 연관되는 Django Model의 필드를 mapping하여 Serializer를 구성할 수 있다. 대부분의 Django 프로젝트에서는 ModelSerializer나 ViewSet을 설정함으로써 쉽게 REST API를 구성할 수 있을 것이다. 그러나, 비즈니스 로직상 Serializer의 field option , data type, related field 처리 등이 Django Model과 달라질 수 있다.

Field Option

Serializer에서 설정할 수 있는 Field option은 다음과 같다. Django Model과 Field mapping이 되는 경우 추가로 기재해두었다.

  • read_only
    • Read에만 필요한 필드
    • Model field 옵션으로 editabl True로 설정 시 True
  • write_only
    • Update와 Create시에는 필요하지만, Model 표현에는 포함되지 않는 필드
  • required
    • Deserializing 과정에서 필요하지 않은 필드
    • Model field 옵션으로 blank, null, default설정시 False
  • default
    • blank or null 입력 시 대체되는 값
    • Model field 옵션으로 default지정 시에 동일한 default 값 혹은 callback으로 설정
  • allow_null
    • Null값 허용 여부
    • Model field 옵션으로 null설정 시 True
  • source
    • Model의 필드에는 존재하지 않지만, serializing과정에서 필요한 모델의 property 혹은 method
  • validators
    • validators 지정 시에 동일한 validator
  • error_messages
    • 에러코드 딕셔너리
  • label
    • verbose_name지정 시에 설정 됨.
  • help_text
    • 필드 설명
  • initial
    • default값이 아닌 입력으로 사용될 값 생성
  • style
    • serializing과정 중 필드를 rendering할 스타일

DRF에서는 Django Model field중 연관된 model이 존재하는 경우 PrimaryKeyRelatedField로 매핑을 하고, related model의 pk를 (De)Serializing한다. 기본적으로 read-write에 모두 사용할 수 있다.

Related Field를 serializing하는 옵션

  • PrimaryKeyRelatedField: pk값
  • StringRelatedField: 연관된 모델의 __str__ 메소드
  • HyperlinkedRelatedField: hyperlink
  • SlugRelatedField: slug
  • 연관된 모델의 serializer를 정의: 연관된 모델의 필드를 선택해서 직렬화가 필요한 경우

유의해야할 점은 Serializer자체에는 연관된 모델을 조회할 때, django ORM의 prefetch_relatedselect_related와 같이 쿼리를 최적화하는 기능은 없다는 것이다. 이 경우, Serializer에 queryset에 최적화된 ORM 형태로 주어야한다.

profile
Ben

0개의 댓글