serializer에 왜 create/update/save함수가 있나요?
666
작성한 질문수 6
안녕하세요 수업 잘 듣고 있어요 :)
DRF 시리얼라이저 궁금한 게 있는데..
시리얼라이저에서 update, create, save를 오버라이딩 할 수 있는데, 이게 json으로 들어온 값을 객체로 만들어서 바로 DB에 넣기 위해 존재한다고 보면 맞을까요?
장고는 MVT 모델이잖아요, 프론트엔드를 react로 하게 되면 DRF에서는 M, V만 건들면 될 것 같고
Model을 수정하는 create, update, save 같은 로직은 view단에서 해야할 거 같은데 왜 이게 시리얼라이저에 들어가 있는 지 궁금해요 ㅜㅜ
예를 들어 회원가입 요청이 json, post요청으로 날아오면
View단에서 CreateAPIView의 post 함수 오버라이딩 하면서 시리얼라이즈하면서 객체 A로 만들어주고, 이걸 someModel.objects.create (A)해야할 것 같은데, 이게 왜 serializer 속으로 들어가 있는 지 궁금합니다.
답변 1
0
안녕하세요.
DRF의 Serializer는 정의한 필드에 대한 입력값에 대한 유효성 검사 및 입력값 변환의 책임을 가지고 있습니다.
ModelSerializer는 Serializer의 책임 + 데이터베이스로의 저장의 책임까지 같이 가지고 있습니다.
ModelSerializer에서 유효성 검사를 한 필드 내역을 모두 가지고 있고, 어떤 모델과 관련이 있는 지도 모두 등록이 되어있으니, ModelSerializer에서 .save 를 지원하는 것은 자연스러운 설계입니다. // 장고 기본의 ModelForm도 save 메서드를 지원하고 있습니다. Serializer와 설계철학이 같습니다.
APiView 에서 perform_create 메서드나 perform_update 메서드 기본 구현에서는 serializer.save() 를 호출하고 있죠. View 단에서 Serializer Instance를 Drive하고 있는 상황입니다.

----
ModelSerializer에서 다루지 않는 필드를 저장할려면, ModelSerializer가 아닌, Serializer를 Drive하는 View 단에서 그 필드들에 대한 저장을 요청하는 방식으로 구현합니다.
예를 들어
Post 모델에 title, content 필드 외에 author, ip 필드가 있다면, author와 ip들처럼 말이죠.
author 필드나 ip를 유저로부터 입력받는 것이 아니라, 서버 단에서 자동으로 입력을 해줘야하는 성격의 필드딜입니다.
이때 perform_create 메서드나 perform_update 메서드를 아래와 같이 재정의할 수 있습니다.
author = self.request.user
ip = self.request.META.get('REMOTE_ADDR')
serializer.save(author=author, ip=ip)
---
살펴보시고, 궁금한 점은 이어서 질문 부탁드립니다.
화이팅입니다. :-)
안녕하세요.
0
49
1
[OneToOne Field Demo] get_user_model() 메서드를 활용해야 하는 이유?
0
273
1
useEffect 훅에서 else 유무에 따른 결과
0
211
1
useAxios 훅의 dependency array 설정
0
245
1
useEffect에서 변수 업데이트 관련 질문
0
382
1
rest_framework.generics.CreateAPIView의 model 속성 유무
0
268
1
bootstrap4
0
470
4
리뉴얼 강의가 오픈이 되면 기존 강의는 더이상 못보는걸까요
1
364
1
admin form에서 앞선 필드 선택 후 다른 필드 select widget 구성하는 방법
0
573
3
useState는 필수일까요?
0
263
1
python manage.py makemigrations instagram 시 created_at default 오류가 발생합니다.
0
600
4
Django allauth를 사용한 소셜 로그인 시 에러
0
655
1
프로젝트명 변경 뒤, 디버그툴바+디버그모드 사용 시 에러
0
555
2
useLocalStorage() 함수 사용여부
0
228
1
django에 LOGIN_URL = '/accounts/login/'의 의미?
0
449
1
리듀서의 의미 재확인
0
430
1
simple-jwt Refresh Token 사용 노하우
0
898
2
docker compose 를 통한 배포 관련 오류 문의
0
670
1
파이썬 속도 장고 관련 궁금한게 있습니다.
0
364
1
is_like_user
0
233
1
related_name 오류
0
273
1
re_path 오류
0
258
1
re_path url
0
251
1
No post matches the given query
0
661
2





