[DRF] Serializer

강현구·2022년 2월 2일
0

Django

목록 보기
9/12

Serializer

serializer는
QuerySet, Model 등의 Complex Type(복잡한 데이터)를 Python DataType인 Dictionary(정확히는 OrderedDict)로 변환시켜주며, 이를 통해 손쉽게 JSON 타입으로 변환할 수 있된다. (직렬화)
이때, 단순히 데이터의 타입을 바꿔주기만 하는 것이 아니라, 포함된 데이터들은 선택, 추가, 수정할 수 있어 훨씬 더 효율적인 설계가 가능하다. 한 serializer에서는 다른 serializer를 받아 추가된 데이터의 형태로 반환해주는 것도 가능하다.

#models.py
from django.db import models

class Test(models.Model):
    name = models.CharField()
    page = models.IntegerField()
    
#serializers.py
from rest_framework import serializers
 
class TestSerializer(serializers.Serializer):
    name = serializers.CharField()
    page = serializers.IntegerFIeld()

다음과 같이 생각하면 쉽다.
-----------------------serialize----------------------->
DB - QuerySet,Model - OrderedDict(ReturnedDict) - JSON
<---------------------deserialize-----------------------

Method

request를 통해서 들어온 data는 deserializing 할 때, save()를 통해서 저장가능하다.
save는 instance가 존재하면 update, 없으면 create하게되며, save를 직접 작성할 수도 있다. 또한, serializer에서 create나 update 메서드를 정의할 수 있다.
save()를 하기전에 반드시 is_vaild()를 호출해야 한다. required fields가 전부 들어오지 않으면 validation error가 발생하는 등의 exception을 처리할 수 있다.

#serializers.py
from rest_framework import serializers
 
class TestSerializer(serializers.Serializer):
    name = serializers.CharField()
    page = serializers.IntegerFIeld()
    
    def create(self, validated_data):
        return Comment(**validated_data)

    def update(self, instance, validated_data):
        instance.name = validated_data.get('name', instance.name)
        instance.page = validated_data.get('page', instance.page)
        return instance
profile
한걸음씩

0개의 댓글