현제의 현재이야기

[KLEA] 1128 개발일지 (좋아요 기능) 본문

DRF/KLAE

[KLEA] 1128 개발일지 (좋아요 기능)

현재의 현제 2022. 11. 28. 16:50

좋아요 기능을 어떻게 해야할지 고민을하다가 잘 찾아서 만들었다. drf가 아니라서 좀 머리가 아팠지만 결과적으로 잘 되었다.

models.py

like_users= models.ManyToManyField(User, related_name='likepost')

 

  • 좋아요는 한 게시글에 여러 user가 좋아요를 누를 수 있기 때문에 n:m 관계에 있다. 

views.py

@api_view(['GET'])
@authentication_classes([SessionAuthentication, BasicAuthentication])
@permission_classes([IsAuthenticated])
def likes(request, pk):
    try:
        post = Post.objects.get(pk=pk)
        if post.like_users.filter(pk=request.user.pk).exists():
            post.like_users.remove(request.user)
            serializer = LikeUsersSerializer(post)
            return Response(serializer.data)
        else:
            post.like_users.add(request.user)
            serializer = LikeUsersSerializer(post)
            return Response(serializer.data)
    except Post.DoesNotExist:
        return Response(status=status.HTTP_404_NOT_FOUND)
  • 우선 pk로 해당 게시글을 받고 만약  그 게시글의 like_users에 request한 user가 있다면 삭제하고, serializer롤 통해서 post_id와 like_users를 보내준다.
  • 만약 user가 없다면 like_users에 추가해주고 보낸다.

serializers.py

class LikeUsersSerializer(serializers.ModelSerializer):
    class Meta:
        model = Post
        fields = ['id', 'like_users']

| 알게된 점

  •  get을 할 때와 post를 할 때는 serializer에 들어가는 값이 다르다.
  • manytomany field를 사용하게 되면 배열로 pk가 들어온다.

'DRF > KLAE' 카테고리의 다른 글

[KLAE] 1230 개발일지  (0) 2022.12.30
[KLAE] 1229 개발일지  (0) 2022.12.29
[KLAE] 1228 개발일지  (0) 2022.12.28
[KLEA] 1125 개발일지 (django와 Mysql 연결, GCP)  (0) 2022.11.26
KLAE를 위한 복습  (0) 2022.10.05
Comments