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 이라고 만들고 넘겨주고 싶은 값을 정의하면 된다. 아래처럼
2. StringRelatedField() 사용법
- ForgeignKey로 연결된 모델의 __str__ 메소드에서 정의한 string를 리턴
- 인자로 many=True, read_only=True 등을 가질 수 있음
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 |
댓글