DRF로 api 서버 개발(4) - 댓글view

Dongwon Ahn·2020년 7월 26일
4

DRF로 API Server 개발

목록 보기
5/8
post-thumbnail

댓글 View를 따로 만드는 이유

앞서 댓글 작성을 할때 Viewset을 활용했기 때문에 get이 가능하지만
model를 comment로 설정했기 때문에 게시글에 달린 댓글식이 아닌 전체 댓글 순서로 나오게 됩니다.
그래서 이번 글에서는 해당 게시글에 달린 댓글만 보여질 수 있도록 api를 추가해보겠습니다.

댓글 read api 만들기

여러 방법이 있겠지만 여기서 저는 Fit-ple 개발때 사용했던
model은 동일하게 사용하고 serializer를 해당 기능에 맞춰서 새로 만들어주는 방식으로 설명하겠습니다.

댓글 view serializer 만들기
boards/serializers.py에 아래 내용을 추가합니다.

class BoardOnlySerializer(serializers.ModelSerializer):
    parent_comments = serializers.SerializerMethodField()

    class Meta:
        model = Board
        fields = ('id', 'parent_comments')

    def get_parent_comments(self, obj):
        parent_comments = obj.comments.filter(parent=None)
        serializer = CommentSerializer(parent_comments, many=True)
        return serializer.data
  • model를 게시글 데이터인 Board로 설정하여 각 게시글에 맞는 댓글 값만 볼 수 있도록 위와 같이 설정합니다.

댓글 view의 view 만들기
boards/views.py에 아래 내용을 추가합니다.

from .serializers import BoardOnlySerializer


class CommentOnlyViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = Board.objects.all()
    serializer_class = BoardOnlySerializer
    permission_classes = [permissions.AllowAny]
  • 해당 기능은 view만 필요하기 때문에 ModelViewSet이 아닌 ReadOnlyModelViewSet을 사용했습니다.

댓글 urls 연결

router.register(r'view/comment', views.CommentOnlyViewSet)

댓글 view Test

http://localhost:8000/boards/view/comment/:id/
view 테스트 이기 때문에 get 방식으로 아래 이미지처럼 테스트 하면 됩니다.


해당 시리즈에서 작업한 코드는 github에 업로드가 되어 있습니다.
부족한 점이나 잘못된 점이 있으면 댓글에 적어주시면 감사하겠습니다.

profile
Typescript를 통해 풀스택 개발을 진행하고 있습니다.

0개의 댓글