코딩/Django

시리얼라이저 복습

김은수2 2023. 5. 4. 20:55

목적 : 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