오류를 이해를 못하겠습니다.
AssertionError at /post/
The `.create()` method does not support writable nested fields by default. Write an explicit `.create()` method for serializer `instagram.serializers.PostSerializer`, or set `read_only=True` on nested serializer fields.
저 오류로 프로젝트 2번 갈아 엎었는데 똑같은 곳에서 계속 막히네요.
답변 1
1
안녕하세요.
뷰에서는 PostSerializer를 통해 시리얼라이저 처리를 하고 있고, PostSerializer 내에서는 AuthorSerializer를 중첩해서 사용하고 있습니다. PostSerializer 입장에서 AuthorSerializer는 nested fields 인 것이죠.
DRF 기본에서는 중첩된 필드에 대해서 조회는 가능하지만, 생성은 지원하지 않습니다. 그래서 아래 시리얼라이저 구성에서 "Post 생성 API"를 호출하셨을 테고, 말씀하신 에러 메세지를 만나셨을 것입니다.
에러 메세지 대로
방법1) PostViewSet의 create 메서드를 직접 구현하여 PostSerializer를 핸들링하는 로직을 직접 구현해주실 수도 있겠구요.
방법2) DRF 기본 기능에서는 author 필드는 조회만 수행되도록 read_only=True 옵션을 추가해주세요. 그럼 포스팅 조회 시에는 author 필드가 조회되지만, 포스팅 생성 시에는 author 필드값을 받지 않게 됩니다.
author = AuthorSerializer(read_only=True)
앞서서 여러 기능을 구현할 때에도 저장한 유저에 대한 지정은 뷰에서 form.is_valid()가 참일 때 request.user 를 통해서 지정했었을 것입니다. 절대 유저로부터 입력된 author 값으로 DB에 저장해서는 안 됩니다.
author 필드에 대한 지정은 PostViewSet 단에서는 perform_create 를 재정의하여 구현해보실 수 있습니다.
# PostViewSet 클래스 내에서
def perform_create(self, serializer):
... serializer.save(author=self.request.user)
그리고 이 PostViewSet에는 CREATE 처리 시에 IsAuthenticated 권한이 필히 지정되어야할 것입니다.
---
화이팅입니다. :-)
안녕하세요.
0
48
1
[OneToOne Field Demo] get_user_model() 메서드를 활용해야 하는 이유?
0
272
1
useEffect 훅에서 else 유무에 따른 결과
0
211
1
useAxios 훅의 dependency array 설정
0
245
1
useEffect에서 변수 업데이트 관련 질문
0
381
1
rest_framework.generics.CreateAPIView의 model 속성 유무
0
266
1
bootstrap4
0
470
4
리뉴얼 강의가 오픈이 되면 기존 강의는 더이상 못보는걸까요
1
362
1
admin form에서 앞선 필드 선택 후 다른 필드 select widget 구성하는 방법
0
572
3
useState는 필수일까요?
0
261
1
python manage.py makemigrations instagram 시 created_at default 오류가 발생합니다.
0
596
4
Django allauth를 사용한 소셜 로그인 시 에러
0
654
1
프로젝트명 변경 뒤, 디버그툴바+디버그모드 사용 시 에러
0
552
2
useLocalStorage() 함수 사용여부
0
228
1
django에 LOGIN_URL = '/accounts/login/'의 의미?
0
447
1
리듀서의 의미 재확인
0
430
1
simple-jwt Refresh Token 사용 노하우
0
897
2
docker compose 를 통한 배포 관련 오류 문의
0
670
1
파이썬 속도 장고 관련 궁금한게 있습니다.
0
364
1
is_like_user
0
233
1
related_name 오류
0
272
1
re_path 오류
0
258
1
re_path url
0
249
1
No post matches the given query
0
659
2





