목적 : ArticleDetailView 에서 댓글들의 정보를 보여주고 싶음
class ArticleDetailView(APIView):
def get(self, request, article_id):
article = get_object_or_404(Article, id=article_id)
serializer = ArticleSerializer(article)
return Response(serializer.data, status=status.HTTP_200_OK)
아티클의 시리얼라이저
class ArticleSerializer(serializers.ModelSerializer):
user = serializers.SerializerMethodField()
comment_set = CommentSerializer(many=True)
def get_user(self, obj):
return obj.user.email
class Meta:
model = Article
fields= '__all__'
여기서 comment_set 는
class CommentSerializer(serializers.ModelSerializer):
class Meta:
model = Comment
fields= '__all__'
이것의 객체가 되고 many=true이기 때문에 comment
models.py 에서
class Comment(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
article = models.ForeignKey(Article, on_delete=models.CASCADE)
content = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
comment는 article 을 외래키로 가지고 있고 ralated_name을 설정해주지 않았기 때문에
아티클 입장에서 comment_set로 조회하면 코맨트를 볼 수 있다.
{
"id": 1,
"user": "eunsu@hash.com",
"comment_set": [
{
"id": 1,
"content": "댓글이에요",
"created_at": "2023-05-02T07:54:03.448307Z",
"updated_at": "2023-05-02T07:54:03.448307Z",
"user": 1,
"article": 1
},
{
"id": 2,
"content": "댓글다는중",
"created_at": "2023-05-02T08:43:25.995063Z",
"updated_at": "2023-05-02T08:43:25.995063Z",
"user": 5,
"article": 1
}
],
"title": "게시글 만들어 줍니다.",
"content": "하하",
"image": "/media/44026246.png",
"created_at": "2023-04-29T14:38:20.648494Z",
"updated_at": "2023-04-29T14:38:20.648494Z",
"likes": []
}
포스트맨으로 확인해 본 결과 댓글들이 오는 모습이다.
# relate_name으로 참조한다. 없을때는 ' '_set 이런식으로 디폴트 값?
# 시리얼라이저에서 exclude 로 하나만 필드에서 제거 가능
좀 더 공부해야 할 내용 serializer Method Field , 메소드 오버라이드 in django
시리얼라이저 메소드필드를 이용해서 원하는 필드값들을 추가해서 이용할 수 있다.
'코딩 > Django' 카테고리의 다른 글
DRF를 이용한 팀프로젝트 진행 (0) | 2023.05.09 |
---|---|
프로젝트 기획 (1) | 2023.05.08 |
파일 입출력 (0) | 2023.05.03 |
장고 과제 해설 (1) | 2023.05.02 |
on_delete 장고의 기능에 대하여 (0) | 2023.05.01 |