티스토리 뷰
[DRF] 모델과 ModelSerializer 만들기 에서
모델을 JSON으로 쉽게 바꿀 수 있도록 해주는 ModelSerializer를 알아봤는데요,
만약
- 모델에 없는 필드인데 JSON에 특정 필드를 추가해서 내려주고 싶거나
- 모델에 있는 값을 변경해서 JSON으로 내려주고 싶거나 (예를 들어 모델에는 fullName 필드가 있는데 JSON은 firtsName으로 내려주고 싶다던가)
할때는 어떻게 해야할까요?!
SerializerMethodField 를 사용하면 됩니다.
이 필드에는 method_name을 지정해줄 수 있는데요, 안지정해주면 get_필드네임 메소드를 부른다라고 적혀있네요
예를들어 이렇게 생긴 Profile 모델이 있다고 할때
JSON으로 nickname 필드를 내려주고 test라는 필드도 따로 추가해서 내려주고 싶다고 해볼게요-!!
그럼 이렇게 Serializer를 만들어주면 됩니다.
또는 메소드 네임을 지정해줘도 됩니다.
그리고 APIView에서 이 serializer를 쓰게 해줄게요
저 API를 요청해보면 우리가 원하는 JSON으로 잘 나오는 것을 볼 수 있습니다 👏
실전 예제
이건 제가 SerailzierMethodFileds를 몰랐을때 만들어줬던 API View들 입니다.
이 코드를 다른 APIView에도 복붙해주면서 마음이 너무 안좋았어요,,,,,,
return Response({"token": token.key, "id": profile.user.id, "nickname": profile.nickname, "family_code": profile.family.code if profile.family is not None else None, "temporary_family_code": profile.temporary_family_code.code if profile.temporary_family_code is not None else None})
근데 이제 SerailzierMethodFileds를 알게 되어서 이렇게 Serailzier를 만들고 나니까!!!
뷰 코드가 깔끔해졌습니다 (감동,,)
'🐍 > DRF' 카테고리의 다른 글
[DRF] 장고 API 만들때, 에러 메세지 정책을 어떻게 하는 게 좋을까? (0) | 2020.10.01 |
---|---|
[DRF] custom exceptionHandler을 만들어서 에러응답을 커스터마이징 하자 (0) | 2020.09.30 |
[DRF] 기본 Exception과 APIExecption (0) | 2020.09.24 |
[DRF] TokenAuthentication (유저마다 토큰을 발급해서 유저를 식별해보자) (10) | 2020.09.21 |
[Heroku] Heroku로 장고 API 배포하기 (0) | 2020.09.15 |
- Total
- Today
- Yesterday
- Django Heroku Scheduler
- flutter deep link
- 플러터 싱글톤
- Watch App for iOS App vs Watch App
- drf custom error
- ipad multitasking
- 플러터 얼럿
- 장고 URL querystring
- flutter 앱 출시
- PencilKit
- Flutter Clipboard
- Dart Factory
- Sketch 누끼
- Flutter getter setter
- flutter dynamic link
- METAL
- Flutter 로딩
- Django FCM
- DRF APIException
- Django Firebase Cloud Messaging
- Flutter Text Gradient
- Python Type Hint
- 장고 Custom Management Command
- cocoapod
- ribs
- flutter build mode
- github actions
- 구글 Geocoding API
- SerializerMethodField
- Flutter Spacer
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |