과제/팀과제

[Django] 최종 프로젝트 : 지금은 전시상황!(9) - [BE]마이페이지 조회 시 좋아요 누른 전시회 데이터 불러오기

마이구미+ 2023. 6. 19. 16:08

<현재 코드>

- 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())

- 포스트맨 시연