본문 바로가기

[내일배움캠프]스파르타코딩클럽 AI 웹개발/Today I Learned

[TIL] trouble shooting - like count

각 댓글에 대해 좋아요를 하고 좋아요가 많은 순서대로 출력하기 위한 코드를 작성하였다

좋아요한 유저를 like_users로 User 모델과 manytomany field로 이어준 후에 출력할 수 있도록 코드를 작성하였다

 

models.py

class Comment(models.Model):
    post = models.ForeignKey(Post, on_delete=models.CASCADE, related_name="comments")
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    content = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)

    like_users = models.ManyToManyField(
        to=User, related_name="like_comments", blank=True
    )

 

 

다음과 같이 좋아요한 유저가 있는 경우에 like_users 안에는 {}과 같은 모양만 출력 되고 내용이 출력되지 않았다

 

serializers.py

class CommentLikeCountSerializer(serializers.ModelSerializer):
    class Meta:
        model = Comment
        fields = [
            "like_users",
        ]
        
        
class CommentSerializer(serializers.ModelSerializer):
    like_users = CommentLikeCountSerializer(many=True, read_only=True)
    like_users_count = serializers.IntegerField(
        source="like_users.count", read_only=True
    )

    class Meta:
        model = Comment
        fields = [
            "id",
            "author",
            "content",
            "created_at",
            "like_users",
            "like_users_count",
        ]

        read_only_fields = ("author",)

 

 

위와 같이 시리얼라이저를 작성한 것이 문제였다

시리얼라이저를 다음과 같이 수정한 후

class CommentLikeCountSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = [
            "id",
            "username",
        ]


class CommentSerializer(serializers.ModelSerializer):
    like_users = CommentLikeCountSerializer(many=True, read_only=True)
    like_users_count = serializers.IntegerField(
        source="like_users.count", read_only=True
    )

    class Meta:
        model = Comment
        fields = [
            "id",
            "author",
            "content",
            "created_at",
            "like_users",
            "like_users_count",
        ]

        read_only_fields = ("author",)

 

 

 

아래와 같이 좋아요를 한 유저가 잘 나오는 것을 확인할 수 있었다