현제의 현재이야기
[KLEA] 1128 개발일지 (좋아요 기능) 본문
좋아요 기능을 어떻게 해야할지 고민을하다가 잘 찾아서 만들었다. 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