<현재 코드>
- views.py
# users/views.py
class UserMypageView(APIView):
def get(self, request, user_id):
user = get_object_or_404(User, id=user_id)
serializer = UserMypageSerializer(user)
return Response(serializer.data)
- serailizers.py
# users/serailizers.py
class UserMypageSerializer(serializers.ModelSerializer):
since_together = serializers.SerializerMethodField()
class Meta:
model = User
fields = ("nickname", "bio", "created_at", "since_together", "profile_image",)
def get_since_together(self, request_user):
calculate = date.today() - request_user.created_at.date()
return calculate.days
<수정한 코드>
- 시리얼라이저에서만 수정해주면 된다
- serailizers.py
- exhibitions 앱 모델에 likes 필드가 User 모델과 ManyToMany로 생성되어 있는데 related_name이 exhibition_likes다
- 그러니 user를 기준으로 해당 유저가 좋아요 누른 전시회 목록을 불러오기 위해서는 related_name으로 SerializerMethodField를 만들어 주어야 한다
- 58번에 obj에는 user 객체가 담긴다
- user.exhibition_likes로 Exhibition 모델의 likes 필드를 역참조하는 것이다
- 값들을 list 형식으로 불러오면 끝!
# users/serailizers.py
class UserMypageSerializer(serializers.ModelSerializer):
since_together = serializers.SerializerMethodField()
exhibition_likes = serializers.SerializerMethodField()
class Meta:
model = User
fields = (
"nickname",
"bio",
"created_at",
"since_together",
"profile_image",
"exhibition_likes",
)
def get_since_together(self, request_user):
calculate = date.today() - request_user.created_at.date()
return calculate.days
def get_exhibition_likes(self, obj):
return list(obj.exhibition_likes.values())
- 포스트맨 시연