댓글
- 대댓글(무한) 가능하게 구성
- 게시글의 댓글을 가져올 때, 중복되지 않게 가져오기
- 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 제거
+) 내일 할 일
- 다중 이미지 수정
- 댓글 삭제시 하위 댓글(대댓글)은 삭제되지 않게 수정