대댓글 기능 만들기
먼저 모델을 만들어 주자. 기존의 Comment 모델과 다른점이라면 Comment 모델을 Foreignkey로 받아온다는 점이다. 어떤 댓글에 대댓글을 달았는지 알아야 하니까 ..
# blogs/models.py
class ReComment(models.Model):
"""대댓글"""
user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name="작성자")
article = models.ForeignKey(Article, on_delete=models.CASCADE, verbose_name="게시글")
comment = models.ForeignKey(Comment, on_delete=models.CASCADE, related_name="recomments")
recomment = models.TextField(null=False, verbose_name="대댓글")
created_at = models.DateTimeField(auto_now_add=True, verbose_name="작성일")
def __str__(self):
return self.recomment
모델을 만들어 주었다면 serializer를 손볼 차례다. 대댓글을 쓸때 사용하는 serializer를 추가해주고 해당 게시글 댓글을 보여주는 serializer도 수정해주어야 한다. ( 기존것은 댓글만 보이기 때문에 대댓글이 있는것들은 대댓글도 같이 출력되도록 바꿔야한다! )
# blogs/serializers.py
class ReCommentSerializer(serializers.ModelSerializer):
class Meta:
model = ReComment
fields = ("id","user","recomment","created_at")
# 수정 전 CommentSerializer
class CommentSerializer(serializers.ModelSerializer):
"""Comment Serializer"""
class Meta:
model = Comment
fields = ("id","user", "comment", "created_at", "article")
# 수정 후 CommentSerializer
class CommentSerializer(serializers.ModelSerializer):
recomments = ReCommentSerializer(many=True)
"""Comment Serializer"""
class Meta:
model = Comment
fields = ("id","user", "comment", "created_at", "article", "recomments")
마지막으로 view함수만 작성하면 끝! 기존의 댓글을 다는 함수와 거의 다른점이 없다.
# blogs/views.py
class ReCommentView(APIView):
def post(self, request, article_id, comment_id):
"""대댓글 작성"""
serializer = ReCommentCreateSerializer(data=request.data)
if serializer.is_valid():
serializer.save(
user=request.user, article=Article.objects.get(pk=article_id), comment=Comment.objects.get(pk=comment_id)
)
return Response(serializer.data, status=status.HTTP_201_CREATED)
else:
return Response(serializer.errors, status=status.HTTP_401_UNAUTHORIZED)
결과
대댓글이 있는 댓글에도 잘 나오는걸 볼 수 있다!!
추후에 언급 기능을 만들껀데 그건 프론트에서 작업을 해야할꺼같다..
'내일 배움 캠프 > TIL' 카테고리의 다른 글
공감 기능 구현과 one-to-one/many, many-to-one/many 관계 (0) | 2023.06.16 |
---|---|
Pagination (페이지네이션) 구현하기 (0) | 2023.06.16 |
조회수 기능 만들기(2)_IP기반 (0) | 2023.06.14 |
Import could not be resolved 오류 (0) | 2023.06.12 |
사용자 ip 가져오기 & 조회수 기능 만들기(1) (0) | 2023.06.09 |