각 댓글에 대해 좋아요를 하고 좋아요가 많은 순서대로 출력하기 위한 코드를 작성하였다
좋아요한 유저를 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",)
아래와 같이 좋아요를 한 유저가 잘 나오는 것을 확인할 수 있었다
'[내일배움캠프]스파르타코딩클럽 AI 웹개발 > Today I Learned' 카테고리의 다른 글
[TIL] 뉴스 API 서버 프로젝트 마무리 및 OpenAI 연동 기능 구현 (0) | 2024.09.20 |
---|---|
[TIL] 트러블 슈팅 - django 프로젝트 외부 파일 실행 (1) | 2024.09.19 |
[TIL] trouble shooting - serializer.data (0) | 2024.09.12 |
[TIL] project setting (0) | 2024.09.11 |
[TIL] spartamarket-DRF 트러블 슈팅2 (1) | 2024.09.10 |