본문 바로가기
  • 기억보단 기록을..
Python/DRF

[DRF] ModelSerializer 사용법 (feat. method-hyperlink)

by reine94._.dev 2021. 1. 20.

DRF

ModelSerializers


 

1. ModelSerializer 란?

이전에는 Serializer를 만들 때, 각 필드를 하나하나 정의해 주었다. 마치 모델을 다시 한 번 작성하는 것 같은
불편함이 있었다. 이 문제를 해결해 주는 것이 ModelSerializer이다.

ModelSerializer는 크게 아래와 같은 3가지 기능을 제공한다. 주는 편리함이 워낙 크기에 Base Serializer보다 훨씬 생산성을 높일 수 있다.

  • (의존하고 있는 모델에 기반해서) Serializer 필드를 자동으로 만들어 줌
  • Serializer를 위한 validator 제공 : ex) unique_together_validators
  • .create(), .update() 함수 기본으로 제공하여 다시 만들 필요 없음

 

1. MethodField() 사용 방법

본 사례에서는 아래와 같은 순서로 코드를 작성하였다.

1) class Meta 작성

  • model = 모델명
  • fields = __all__, exclude, 직접 명시 ('id', 'name')
  • read_only_field = ['id']

2) serializer로 정의해 줘야 되는 필드

  • 추가하고 싶은 필드가 있을 경우, serializer.SerializerMethodField()로 정의해 줌
  • ForeginKey로 연결된 필드가 있을 경우,
    • 디폴트는 ForeignKey로 연결된 필드의 pk를 가져옴
    • 만약 해당 데이터의 String이나 Hyperlink 를 가져오고 싶다면 별도로 지정을 해 줘야 함
    • time_since_publication 이라고 필드명을 짓고,
      함수이름을 get_time_since_publication 이라고 만들고 넘겨주고 싶은 값을 정의하면 된다. 아래처럼

SerializerMethodField 사용법

 

2. StringRelatedField() 사용법

  • ForgeignKey로 연결된 모델의 __str__ 메소드에서 정의한 string를 리턴
  • 인자로 many=True, read_only=True 등을 가질 수 있음

 

StringRelatedField()
StringRelatedField 로 생성된 친구

 

Journalist 모델의 def __str__(self) 함수의 리턴값을 반환해준다.

class Journalist(models.Model):
    ...
    def __str__(self):
        return f"{ self.first_name } { self.last_name }"

 

3. HyperlinkedRelatedField() 사용법

...생략

 


[참고블로그]

velog.io/@phyyou/DRF-%EA%B3%B5%EB%B6%80%ED%95%98%EA%B8%B0-6-ModelSerializer

 

DRF 공부하기 (6) :: ModelSerializer

https://velog.io/@jcinsh/DRF-5-ModelSerializer 의 글을 베끼며 공부해봄

velog.io

 

'Python > DRF' 카테고리의 다른 글

[DRF] JWT 사용하기 (feat.simplejwt)  (0) 2021.01.19
[DRF] CBV - APIView, Mixins, generics APIView, ViewSet  (0) 2021.01.05
[DRF] Json 기초  (0) 2021.01.05

댓글