SerializerMethodField()
serializer 에서 사용할 수 있는 옵션 중 하나로,
해당 serilizer에 있는 field의 값을 변경해주거나 아예 없는 값을 추가하는데에도 사용할 수 있다.
예시 :
likes는 기존 모델에 있는 field이다.
likes_count 라는 수를 세어주는 함수와 serializerMethodFiedl를 사용해 없는 field를 추가하였다
class FeedDetailSerializer(serializers.ModelSerializer):
"""feed 상세 serializer"""
likes_count = serializers.SerializerMethodField()
likes = serializers.StringRelatedField(many=True)
class Meta:
model = Feed
fields = ['likes', 'likes_count',]
def get_likes_count(self, obj):
return obj.likes.count()
StringRelatedField()
위의 예시에서도 보이는 다른 옵션 StringRelatedField.
기본적으로 FK로 받아온 field는 primary key 값으로 표시되지만,
primary key 값대신 value값을 보내기 위해 StringRelatedField를 사용할 수 있고
무조건 Read only임!!
** 해당 모델에 스트링 메서드를 정의하면 해당 field를 가져올 수 있다.
likes는 User 모델에서 다대다 관계를 가지고 있는 필드여서 적용이 가능하고
M2M인 경우 꼭! many=True 옵션을 주어야한다
class Feed(models.Model):
...
likes = models.ManyToManyField(
"user.User", blank=True, default=[], related_name="feed_likes"
)
가져오는 결과물
{
'likes': [
'1: 닉네임1',
'2: 닉네임2',
'3: 닉네임7',
...
]
}
PrimaryKeyRelatedField()
마찬가지로, pk로 연결하는 field도 있다!!
아래는 공식문서의 예시
옵션은 필요한 것을 사용하자
class AlbumSerializer(serializers.ModelSerializer):
tracks = serializers.PrimaryKeyRelatedField(many=True, read_only=True)
class Meta:
model = Album
fields = ['album_name', 'artist', 'tracks']
아래와 같이 pk값만을 가져온다.
{
'album_name': 'Undun',
'artist': 'The Roots',
'tracks': [
89,
90,
91,
...
]
}
그외 관계를 표현하는 옵션
SlugRelatedField()
slug형태로 된 내용을 가져올 수 있다. str, int ...
write, read 둘다 가능한데, unique=True 옵션을 주어야함
hyperlinkedrelatedfield()
hyperlink 내용을 가져온다. (list형태)
write, read 둘다 가능
hyperlinkedIdentifyfield()
hyperlink로 내용을 가져온다 (단일)
읽기 전용
옵션 말고도 유익한 정보가 많으니 나머지 부분도 읽어보자!
[참고] : https://www.django-rest-framework.org/api-guide/relations/
'AI 웹개발반 > Python, Django' 카테고리의 다른 글
[Django] datetime을 활용해 시간 비교하기 (0) | 2023.06.27 |
---|---|
[django] 오류를 해결할때 (0) | 2023.06.23 |
[TIL] django cron / crontab (0) | 2023.06.13 |
[DRF + JS] 비디오와 미디어를 넣은 게시글 생성하기 ***수정중 (0) | 2023.05.15 |
[DRF] serializer, Foreignkey 정보 가져오기 *** 수정중 (0) | 2023.05.15 |