1️⃣depth
Article이 "title", "content", "author" 필드를 가지고 있고,
이 중 author 필드가 user와 ForeignKey관계라고 가정.
class Article(models.Model):
title = models.CharField ...
content = models.CharField ...
author = models.ForeignKey(User, ...)
class ArticleSerializer(ModelSerializer):
class Meta:
model = Article
fields = '__all__'
depth = 1
이렇게 Serializer에 depth를 1로 주면 GET 요청으로 Article 객체를 가져올 때,
User의 모든 정보까지도 가져올 수 있다.
{
"id": 1,
"title": "Example Article",
"content": "Lorem ipsum dolor sit amet...",
"author": {
"id": 1,
"username": "example_user",
"email": "user@example.com",
"first_name": "John",
"last_name": "Doe",
"profile": 1
}
}
그렇지만 User와 OnetoOne 관계인 profile의 경우, PrimaryKey만을 가져오고 있다.
여기서 만약 depth가 2가 된다면? User와 관계 필드에 있는 데이터까지 가져온다.
{
"id": 1,
"title": "Example Article",
"content": "Lorem ipsum dolor sit amet...",
"author": {
"id": 1,
"username": "example_user",
"email": "user@example.com",
"first_name": "John",
"last_name": "Doe",
"profile": {
"id": 1,
"bio": "Lorem ipsum dolor sit amet...",
"website": "https://example.com",
...
}
}
}
이런식으로 depth가 높아질수록, 더 깊은 데이터를 가져올 수 있다.
2️⃣repr()
repr메소드는 원래 해당 객체의 문자열 표현을 반환한다.
DRF의 ModelSerializer는 해당 Serializer가 담고 있는 값들을 보여주도록
__repr__() 메서드를 통해 오버라이딩 되어있다.
이를 사용해서 해당 serializer가 가지고 있는 값들을 볼 수 있다.
예시)
아래와 같은 Model과 Serializer가 있다고 가정.
class Article(models.Model):
title = models.CharField(max_length=25)
content = models.CharField(max_length=25)
class ArticleSerializer(serializers.ModelSerializer):
length = serializers.SerializerMethodField()
def get_length(self, obj):
return len(obj.content)
class Meta:
model = Article
exclude = ['id']
serializer = ArticleSerializer()
print(repr(serializer))
해당 코드를 실행하면
아래와 같이 필드의 정보가 출력된다.
ArticleSerializer():
length = SerializerMethodField()
title = CharField(max_length=25)
content = CharField(max_length=25)
'Python > Django' 카테고리의 다른 글
[DRF] GenericAPIView와 Mixins (0) | 2023.06.07 |
---|---|
[DRF] ModelSerializer와 CreateModelMixin 사용하기 (0) | 2023.06.06 |
구글 소셜 로그인 in Django - 2. 유저 정보 받아오기 (1) | 2023.05.31 |
구글 소셜 로그인 in Django - 1. 애플리케이션 세팅하기 (0) | 2023.05.31 |
카카오 소셜 로그인 in Django (0) | 2023.05.30 |
댓글