[Django] serializers는 무슨 역할이고, model class와는 동질적인 것일까? 이질적인 것일까?

Heeyoung Joe·2023년 6월 6일
0

[Django]

목록 보기
1/3

여기서 의미하는 "동질성"은 대체 가능한가를 의미한다.
답은 동질적이지 않다이다.

Model class는 django내에서 database에 정보를 연결하는 역할이라면, serializer의 역할은 JSON 데이터를 잘 풀어 model class에 녹여내는 역할이다.

Serializer class와 model class가 똑같은 property들을 담아서 헷갈렸다. 하지만 serializer가 자기 내부에 Model class instance와 동일한 property를 담는 이유는 Model class instance와 독립적인 무언가를 만들기 위함이 아니라 동질적인 데이터를 JSON 데이터로부터 받아서 Model class instance를 운용하기 위함일 뿐이다. 그래서 serializer class의 내부 함수를 보면 아래와 같다.

    def create(self, validated_data):
        return Comment.objects.create(**validated_data)

    def update(self, instance, validated_data):
        instance.email = validated_data.get('email', instance.email)
        instance.content = validated_data.get('content', instance.content)
        instance.created = validated_data.get('created', instance.created)
        instance.save()
        return instance

이 코드는 문서에서 따온 코드로, Comment는 model class의 이름이고 위 두 함수는 CommentSerializer 라는 serializer class의 내부에 있는 함수이다.
create 함수는 자기 스스로의 instance를 만들지 않고 model class instance를 만들고 update함수도 model class의 instance를 받아 JSON을 풀어낸 결과를 넣어주는 식인 것을 확인할 수 있다.

cf. 새 model instance 를 만들되 저장을 하며 추가적인 액션을 취하고 싶다면 serializer class에서 save 함수를 재정의 하는 것도 방법이다.

class ContactForm(serializers.Serializer):
    email = serializers.EmailField()
    message = serializers.CharField()

    def save(self):
        email = self.validated_data['email']
        message = self.validated_data['message']
        send_email(from=email, message=message)

이제는 오히려 model serializer와 model manager가 무슨 차이인지 불분명해졌다. 다음 글에서는 그 주제를 다루려고 한다.

profile
SW Engineer

0개의 댓글