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"]
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)
해서 해싱을 꼭 해줘야한다.
그림은 뭘나타낸거져 ? ㅠ 애기인가요