SerializerMethodField()
시리얼라이저로 객체를 직렬화 할 때, SerializerMethodField()를 활용하면 필드 값을 입맛에 맞게 가공할 수 있다.
예를 들어, Post라는 모델에 likes라는 ManyToManyField를 아래와 같이 만들어주었다면 DB에는 어떤 post에 누가 좋아요를 눌렀는지 확인할 수 있다. 하지만 어떤 post에 좋아요를 몇 명이 눌렀는지에 대한 정보는 없다.
# models.py
class Post(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
...
likes = models.ManyToManyField(User, related_name='like_posts')
SerializerMethodField() 사용하기
이런 경우 시리얼라이저로 객체를 직렬화 할 때, likes라는 필드를 변형해주면 시리얼라이저에 원하는 정보를 담을 수 있게 된다. 아래와 같이 likes_count = serializers.SerializerMethodField()를 사용해준다면 likes_count에 좋아요를 누른 user 수를 담을 수 있다.
# serializers.py
class postlikeSerializer(serializers.ModelSerializer):
user = serializers.SerializerMethodField()
likes_count = serializers.SerializerMethodField()
def get_likes_count(self, obj):
return obj.likes.count()
class Meta:
model = Post
fields = ('user', 'likes_count')
위에서는 method_name 값을 지정해주지 않았기 때문에 get_이 붙게 되어 get_likes_count로 필드네임이 지정 되지만, method_name을 지정해서 사용할 수도 있습니다. SerializerMethodField(method_name='likes_count')
likes_count = serializers.SerializerMethodField(method_name='likes_count')
def likes_count(self, obj):
return obj.likes.count()
'코딩공부 > Django' 카테고리의 다른 글
DRF Serializer를 통한 유효성 검사 (0) | 2022.12.21 |
---|---|
Python 라이브러리 의존성 확인하는 방법(pipdeptree) (0) | 2022.12.13 |
Django 각종 API Key, Token 관리하는 방법 (0) | 2022.12.07 |
DRF APIView로 좋아요 기능 구현_백엔드 (0) | 2022.12.02 |
상태코드 HTTP_204_NO_CONTENT 관련 에러 (0) | 2022.11.28 |
댓글