[ 06/20 TIL ] Serializer (2)

JoonQpa·2022년 6월 20일
1
post-thumbnail

drf 4일차

Serializer를 사용할때 데이터 타입이 QuerySet이라면 many=True를 붙여줘야함

역참조를 확실하게 이해를 할 필요가 있다.

📌역참조 예시

class ArticleSerializer(serializers.ModelSerializer):
    articles_user = serializers.SerializerMethodField()


    # category = serializer.SerializerMethodField()
    # def get_category(self, obj):
    #     return [category.name for category in obj.category.all()]
    
    def get_articles_user(self,obj):
        return obj.author.username

    class Meta:
        model = Article
        fields = ["title", "body", "articles_user"]

class CommentSerializer(serializers.ModelSerializer):
    comments_user = serializers.SerializerMethodField()

    def get_comments_user(self,obj):
        return obj.author.username
    class Meta:
        model = Comment
        fields = ["comment", "comments_user"]

class UserProfileSerializer(serializers.ModelSerializer):
    class Meta:
        model = UserProfile
        fields = ["user"]

class UserSerializer(serializers.ModelSerializer):
    article_set = ArticleSerializer(many=True)
    #articles = ArticleSerializer(many=True, source="article_set")
    comment_set = CommentSerializer(many=True)
    userprofile = UserProfileSerializer()
    print(comment_set)
    class Meta:
        model = User
        fields = ["username","userprofile","article_set","comment_set"]

📌packing unpacking

def test(a, b, *args, **kwargs):
    pass

some_list = [1,2,3,4,5]

print(some_list)
# [1,2,3,4,5] 리스트로
print(*some_list)
# 1 2 3 4 5 리스트가 사라짐

object.add(*[1,2,3,4])
# 리스트 형식으로 add는 안되기때문에 *을 붙임으로써 unpacking 해주는 작업
# 딕셔너리 형식을 **로 언패킹

return시 status code를 꼭 작성해주어야 한다.
프론트엔드에서 처리할 작업이 달라지기 때문

join_date는 무조건 read only로 설정해줘야됨
왜냐면 auto_now_add=True기 때문에 오브젝트가 생성된 순간을 담기때문에 사용자가 설정할 수 없어서 read only로 설정하지 않으면 에러가 난다.

유저 생성시에는 user.set_password(password)해서 해싱을 꼭 해줘야한다.

profile
Intuition factory: from noob to pro

2개의 댓글

comment-user-thumbnail
2022년 6월 21일

그림은 뭘나타낸거져 ? ㅠ 애기인가요

1개의 답글