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과 달라질 수 있다.
Serializer에서 설정할 수 있는 Field option은 다음과 같다. Django Model과 Field mapping이 되는 경우 추가로 기재해두었다.
read_only
editabl
True로 설정 시 Truewrite_only
required
blank
, null
, default
설정시 Falsedefault
default
지정 시에 동일한 default 값 혹은 callback으로 설정allow_null
null
설정 시 Truesource
validators
error_messages
label
help_text
initial
style
DRF에서는 Django Model field중 연관된 model이 존재하는 경우 PrimaryKeyRelatedField
로 매핑을 하고, related model의 pk를 (De)Serializing한다. 기본적으로 read-write에 모두 사용할 수 있다.
Related Field를 serializing하는 옵션
PrimaryKeyRelatedField
: pk값StringRelatedField
: 연관된 모델의 __str__
메소드HyperlinkedRelatedField
: hyperlinkSlugRelatedField
: slug유의해야할 점은 Serializer자체에는 연관된 모델을 조회할 때, django ORM의 prefetch_related
나 select_related
와 같이 쿼리를 최적화하는 기능은 없다는 것이다. 이 경우, Serializer에 queryset에 최적화된 ORM 형태로 주어야한다.