본문 바로가기
개발_TIL

개발_TIL | 2022-07-28 (70)

by Hee94 2022. 7. 31.

좋아요 카운트

상황

  • 질의응답 게시판의 게시글과 답변의 좋아요를 클릭 시, 좋아요 count를 체크하여 보여주려고 함
    (로그인한 유저는 좋아요를 눌렀을 경우 다시 누르면 취소가 되니 그땐 count가 빠져야함)

해결

if (questionlike.includes(user_id) != true) {
        button_like_question.setAttribute("class", "btn btn-primary");
        button_like_question.innerText = " ♥  " + details.like.length;
    } else {
        button_like_question.setAttribute("class", "btn btn-danger");
        button_like_question.innerText = " ♡  " + details.like.length;
    }
  • like 안에 user_id가 포함되어져 있지 않다면 버튼 클래스를 “btn btn-primary”로 변경하고
    details.like.length를 텍스트안에 넣어 카운트 수로 표현하였다.

여기서 문제발견!

  • 무슨 이유인지 다른 유저로 로그인을 해도 좋아요 버튼을 클릭 하였을 때, 유저 마다 좋아요를
    특정하는 것이 아니라 버튼을 누르는 기준으로 좋아요가 눌리고 취소되었다.

원인)

  • 백엔드 개발 과정 중에 qnq 앱에서 views.py에서 설정하지 못하고 넘어간 문제가 있었다.
# qna / views.py

class LikeQuestionView(APIView):
    def post(self, request, question_id):
        user = request.user
        target_question_like = QuestionLikeModel.objects.filter(question=question_id, user=user)
        if not target_question_like:
            target_question = QnAQuestionModel.objects.get(id=question_id)
            target_question_like = QuestionLikeModel.objects.create(question=target_question, user=user)
            return Response({"message":"좋아요를 눌렀다북!"},status=status.HTTP_200_OK)
        else:
            target_question_like.delete()
            return Response({"message":"좋아요를 취소했다북.."},status=status.HTTP_200_OK)

class LikeAnswerView(APIView):
    def post(self, request, answer_id):
        print("답글 좋아요 API 작동하라!")
        user = request.user
        target_answer_like = AnswerLikeModel.objects.filter(answer=answer_id, user=user)
        if not target_answer_like:
            target_answer = QnAAnswerModel.objects.get(id=answer_id)
            target_answer_like = AnswerLikeModel.objects.create(answer=target_answer, user=user)
            return Response({"message":"좋아요를 눌렀다북!"},status=status.HTTP_200_OK)
        else:
            target_answer_like.delete()
            return Response({"message":"좋아요를 취소했다북.."},status=status.HTTP_200_OK)
  • 위 코드에서 target_question_like 와 target_answer_like 를 선언할 때,
    각자의 likeModel.objects.filter를 통해서 user=user를 집어넣어 user 특정해주어야하는데 해주지 않았던 것이다.
  • LikeQuestionView 와 LikeAnswerView 에 모두 입력 해주었더니 좋아요 기능이 원할하게 잘 작동하였다.

'개발_TIL' 카테고리의 다른 글

개발_TIL | 2022-08-01 (72)  (0) 2022.08.02
개발_TIL | 2022-07-29 (71)  (0) 2022.07.31
개발_TIL | 2022-07-27 (69)  (0) 2022.07.27
개발_TIL | 2022-07-26 (68)  (0) 2022.07.26
개발_TIL | 2022-07-25 (67)  (0) 2022.07.26