[Django REST Framework] Serializer

moning02004·2020년 5월 19일
0

Django REST Framework

목록 보기
3/3

모델을 직렬화해주는 것이다. 직렬화를 해주어야 HTTP 응답으로 보낼 수 있다. Serializer를 이용하면 모델들의 필드들이 JSON 형식으로 변환된다.

class PostListSerializer(serializers.ModelSerializer):
    class Meta:
        model = Post
        fields = ['title', 'author', 'content', 'created', 'view']

게시판에 접속하고 Post 리스트를 달라는 API를 호출했을 때, 이 serializer를 이용한다. 그러면 불려진 Post들이 모두 fields에 명시된 title, author, content, created들이 [{"title": "첫 번째 게시글", "author": "1", "content": "첫 번째 게시글입니다.", "created": "2020/05/19"}] 와 같이 변환되어 응답으로 보낸다.

추가적으로 필드를 만들거나 수정해서 보낼 수도 있다.

class PostListSerializer(serializers.ModelSerializer):
    is_best = serializer.SerializerMethodField('is_best')
    
    def is_best(self, instance):
        return instance.view >= 100
        
    class Meta:
        model = Post
        fields = ['title', 'author', 'content', 'created', 'view', 'is_best']

간단하게 100회 이상 열람된 게시물인지 아닌지 확인하는 is_best라는 필드를 추가했다.

author는 ForeignKey로 되어있어 이의 PK인 숫자가 들어간다. 하지만 사용자 정보를 넣는 방법도 있다.

class UserInfoSerializer(serializers.ModelSerializer):
    class Meta:
        model = get_user_model()
        fields = ['id', 'username', 'name', 'phone']

class PostListSerializer(serializers.ModelSerializer):
    is_best = serializer.SerializerMethodField('is_best')
    author = UserInfoSerializer(read_only=True)
    
    def is_best(self, instance):
        return instance.view >= 100
        
    class Meta:
        model = Post
        fields = ['title', 'author', 'content', 'created', 'view', 'is_best']

UserInfoSerializer의 fields에 명시된 필드가 author에 들어간다.

{
  "title": "첫 번째 게시글",
  "author": {
        "id": "1",
        "username": "user1@example.com",
        "name": "user_1",
        "phone": "01001110111",
  },
  "content": "첫 번째 게시글입니다.",
  "created": "2020/05/12"
  "view": "12"
}

위와 같이 응답으로 보내게 된다.

profile
Django

0개의 댓글