본문 바로가기

Django

DRF ModelSerializer

근데 serializer를 매번 model 처럼 속성을 길게 적어줘야하는 노가다를 해야하나?

아니다. 더 간단하게 해줄 수 있다. ModelSerializer를 사용하게 되면 더 간단하게 사용할 수 있다.

아래 코드를 보자

from rest_framework import serializers
from .model import User

class UserSerializer(serializers.ModelSerializer):
  class Meta:
    model = User
    fields = ("name", "phone", "birthday", "friend")

일반 Serializer를 사용했을때와 지금을 보자 어떤가?

훨씬 간단하게 작성이 되어졌다. 이렇게 수정하고 runserver를 통해서 확인해보자 Serializer의 내용과 같게 나올것이다.

좀 더 추가된 내용이 있다면 속성에 friend 가 추가되었는데, friend는 user 테이블과 Foreignkey관계라고 보면 json 데이터에 friend의 pk값이 나올것이다.

{
  "name": "Jone",
  "phone": "01000000000",
  "birthday": "1990-01-01",
  "friend": 4
}

client에서 요청한 데이터를 받아서 사용할때 외래키의 자세한 정보를 필요로 할때가 있다. 그때 server에서 json 데이터로 같이 보내주면 더할나위 없이 좋을거다.

그 방법은 serializer에 새로운 클래스를 하나 추가해주는 것이다.

# users/serializers.py
# 내용 추가

class TinyFriendSerializer(serializer.ModelSerializer):
  class Meta:
    model = Friend
    fields = ("name", "best_friend")

class UserSerializer(serializers.ModelSerializer):
  friend = TinyFriendSerializer()

  class Meta:
    model = User
    fields = ("name", "phone", "birthday", "friend")

json 데이터 결과

{
  "name": "Jone",
  "phone": "01000000000",
  "birthday": "1990-01-01",
  "friend": {
    "name": "Poll",
    "best_friend": True
  }
}

내가 작성한 그대로 필요 데이터들만 JSON으로 변환되는걸 볼 수 있다.

'Django' 카테고리의 다른 글

Django management command 사용하기  (0) 2021.06.30
Django User model Custom  (0) 2021.06.29
DRF serializer  (0) 2021.06.19
DRF 함수형 뷰 (@api_view)  (0) 2021.06.19
django rest framework에 대해서  (0) 2021.06.19