댓글

  • 대댓글(무한) 가능하게 구성
  • 게시글의 댓글을 가져올 때, 중복되지 않게 가져오기
  • url 최대한 깔끔하게 사용하기

 

# ================================
urlpatterns = [
    path("<int:place_id>/comment/", views.PlaceCommentView.as_view(),
         name='place_commment_view'),
    path("<int:place_id>/comment/<int:place_comment_id>/", views.PlaceCommentDetailView.as_view(),
         name='place_commment_detail_view'),
]


# ================================
class PlaceCommentView(APIView):

    # (프론트) 해당 게시글 댓글 가져오기
    # 중복 없이 가져오기
    def get(self, request, place_id):  # ✔️
        place = get_object_or_404(Place, id=place_id)
        
        query = place.place_comment_place.filter(main_comment=None)
        serializer = PlaceCommentSerializer(query, many=True)
            
        return Response(serializer.data)
        

# ================================
# 댓글 출력을 위한 오버라이딩
class RecursiveSerializer(serializers.Serializer):
    def to_representation(self, instance):
        serializer = self.parent.parent.__class__(instance, context=self.context)
        return serializer.data


# place 댓글 시리얼라이저
class PlaceCommentSerializer(serializers.ModelSerializer):
    reply = serializers.SerializerMethodField()
    # slug_field : Place 모델의 id
    place = serializers.SlugRelatedField(queryset=Place.objects.all(), slug_field='id')
    
    class Meta:
        model = PlaceComment
        fields = ['id', 'user', 'place', 'content', 'main_comment', 'created_at', 'updated_at', 'reply']
        
    def get_reply(self, instance):
        serializer = self.__class__(instance.reply, many=True)
        serializer.bind('', self)
        return serializer.data

 

 

 

역할 분담

 

 

오늘의 커밋

 

[Feat] : place 대댓글 기능 추가
 

-views 생성 : 댓글, 대댓글, 좋아요 기능 추가
-views 추가 : 상세보기 댓글 시리얼라이저 추가
-views 수정 : 권한 수정 (is_admin -> is_staff), Response 컨벤션 맞춰 변경
-models 수정 : category, like 테이블 추가, image -> PlaceImage 모델로 분리
-serializers 수정 : 이미지 시리얼라이저, 대댓글 시리얼라이저 추가 및 필드 순서 변경
-urls 제거 : 대댓글 urls 제거

 

 

+) 내일 할 일

  • 다중 이미지 수정
  • 댓글 삭제시 하위 댓글(대댓글)은 삭제되지 않게 수정

+ Recent posts