serializers.py
from rest_framework import serializers
from django.contrib.auth import get_user_model
class OtherUserSerializer(serializers.ModelSerializer):
class Meta:
model=get_user_model()
fields = ["id", "username", "date_joined", "introduction"]
def to_representation(self, instance):
ret = super().to_representation(instance)
ret["user_contents_url"] = f"api/content/?user={instance.id}"
ret["user_comments_url"] = f"api/content/comment/?user={instance.id}"
ret["favorite_contents_url] = f"api/content/?favorite-by={instance.id}"
return ret
# 여기에서 OtherUserSerializer를 상속받아 새로운 시리얼라이저를 생성
class UserSerializer(OtherUserSerializer):
### 유저 본인의 페이지를 조회할 때 좋아요를 누른 글과 댓글이 보여야 하므로 상속한 것에 추가해 줌.
def to_representation(self, instance):
ret = super().to_representation(instance)
ret["liked_contents_url"] = f"api/content/?liked-by={instance.id}"
ret["liked_comments_url"] = f"api/content/comment/?liked-by={instance.id}"
views.py
...
from .serializers import UserSerializer, OtherUserSerializer
class UserPageAPIView(APIView):
def get(self, request, username):
user = get_object_or_404(get_user_model(), username=username)
# 분기 처리
if request.user == user:
serializer = UserSerializer(user)
else:
serializer = OtherUserSerializer(user)
return Response(serializer.data)
추가로 내가 구현하지 않은 부분은 팀장님 코드리뷰를 보면서 fork한 레포에 주석으로 정리해 둠
Keep
Problem
TRY