데이터 분석 기술 블로그

Django에 대하여(35)_DRF with N:1 Relation - POST 본문

백엔드

Django에 대하여(35)_DRF with N:1 Relation - POST

데이터분석가 이채은 2024. 5. 23. 09:00

POST

단일 댓글 생성을 위한 url 및 view 함수 작성

# articles/urls.py

urlpatterns = [
    ...,
    path('articles/<int:article_pk>/commments/', views.comment_create),
]

serializer 인스턴스의 save() 메서드는 특정 Serialzier 인스턴스를 저장하는 과정에서 추가 데이터를 받을 수 있음

# articles/views.py
@api_view(['POST'])
def comment_create(request, article_pk):
    article = Article.objects.get(pk=article_pk)
    serializer = CommentSerializer(data=request.data)
    if serializer.is_valid(raise_exception=True):
        serializer.save(article=article)
        return Response(serializer.data, status=status.HTTP_201_CREATED)

CommentSerializer에서 외래 키에 해당하는 article field 또한 사용자로부터 입력받도록 설정되어 있기 때문에 서버 측에서 누락되었다고 판단한 것입니다.

POST http://127.0.0.1:8000/api/v1/articles/1/comments/ 응답 확인 - 상태코드 400 응답 확인


읽기 전용 필드

데이터를 전송하는 시점에 "유효성 검사에서 제외시키고, 데이터 조회 시에는 출력"하는 필드입니다.

# articles/serializers.py

class CommentSerializer(serializers.ModelSerializer):
    class Meta:
        model = Comment
        fields = '__all__'
        read_only_fields = ('article',)

POST http://127.0.0.1:8000/api/v1/articles/1/comments/ 재요청