count=Comment.objects.all().count()
print(count)
if int(parent_comment_id) <= count :# pk를 잘이용하면 될 것 같다. 해당 게시물내에 있는 댓글이어야 한다.
parent_comment = get_object_or_404(Comment, id=parent_comment_id)
new_reply.comment = parent_comment
else:
# 대댓글의 대댓글 처리
parent_reply_id = request.POST.get('parent_reply_id')
print(f"Received parent_reply_id: {parent_reply_id}")
if parent_reply_id:
parent_reply = get_object_or_404(Comment_Reply, id=parent_reply_id)
new_reply.parent = parent_reply
# while parent_reply.parent: # 최상위 부모 댓글 찾기
# parent_reply = parent_reply.parent
# new_reply.comment = parent_reply.comment # 최상위 부모 댓글 설정
new_reply.save()
위의 코드에 문제가 있었다.
게시글을 한 번 삭제하고 나서 카운트되는 개수가 꼬이면서 해당 게시물에 대댓글이 달리는 것이 아니라 아예 다른 게시물에 대댓글이 달리는 상황이 벌어졌다.
도저히 문제가 해결이 되지 않아서 다른 사람들이 한 것을 찾아보니 다른 사람들은 comment DB를 한 개만 만들어서 대댓글 기능까지 구현을 하고 있다는 사실을 알았다.
거기서 내가 첫 단추부터 잘 못 꿰었음을 알았다.
지금 문제는 comment_template가 계속 반복되면서 댓글의 위치 아이디를 만들어낸다.
그 아이디를 받아오는데 첫 번째 댓글의 대댓글은 Comment DB에서 값을 가져오고 나머지는 Comment_Reply DB에서 가져와야 했다.

이 문제를 몇일을 고민했다. gpt에게도 물어보고 인터넷으로 찾아도 보고 나혼자 고민도 했지만 도저히 답이 나오지가 않았다.
pk를 사용해서 현 게시물에 있는 댓글이 아니라면 Comment_Reply DB에서 값을 가져오는 조건문, 게시글 내부에 있는 댓글의 개수를 세서 받아온 parent_id 값이 같거나 작으면 실행하는 조건문등.. 다양하게 고민을 하려 노력했지만 자꾸 문제가 발생했다.
직감적으로 해결책이라는 생각이 들었고 아래 코드를 작성했다.
try:
parent_comment = Comment.objects.get( id=parent_comment_id)
new_reply.comment = parent_comment
except Comment.DoesNotExist:
parent_reply_id = request.POST.get('parent_reply_id')
if parent_reply_id:
parent_reply = get_object_or_404(Comment_Reply, id=parent_reply_id)
new_reply.parent = parent_reply
첫 번째 댓글을 입력하고 대댓글까지는 try문으로 문제없이 실행이 될 것이다. 그 이후에 들어오는 id값들이 Comment DB에 존재하지 않는다면 Comment_Reply DB로 가서 찾아라 라는 try - except 문을 만들었다.
문제없이 해결 되었다.
'장고' 카테고리의 다른 글
개발 일지 15 - 게시글 좋아요 순으로 정렬 + 페이지 바뀔 때 정렬 유지 (0) | 2024.08.29 |
---|---|
개발 일지 14 - 게시글 조회수로 정렬 (0) | 2024.08.28 |
개발 일지 13 - 댓글 좋아요 기능 (0) | 2024.08.27 |
개발 일지 12 - 게시판 좋아요 기능 (0) | 2024.08.26 |
개발 일지 11 - 댓글 수정, 삭제 기능 추가 (0) | 2024.08.25 |