본문 바로가기
관리자

Programming-[Backend]/Django

[TIL] Django ModelSerializer의 field, validate()의 data

728x90
반응형

 

ModelSerializer의 field 구분

 

어떤 Serializer가 ModelSerializer를 상속받도록 만들었다면, Meta 라는 class를 만들고 그 내부에 field 값들을 적게 된다. 그리고 상위에 custom 필드, read_only_fields를 아래와 같은 방식으로 작성한다.

 

class CustomeSerializer(
    serializers.ModelSerializer,
):
    desc = serializers.CharField(write_only=True)
    color = serializers.CharField(
        label="색깔", help_text="`#FFFFFF` 형태의 정확한 HEX 값을 입력해주세요.", required=False
    )

    class Meta:
        model = Comment
        read_only_fields = ["id", "size", "name"]
        fields = [
            "desc",
            "color",
        ] + read_only_fields

 

1. Meta 클래스 내부 필드

model에서 정의한 field 정보를 그대로 가져온다. 예를 들어 Comment 모델에서 desc = CharField(null=False)라고 정의했다면 정의한 옵션을 그대로 들고온다.

 

2. Serializer 내부 필드

위 예제 코드에서 Serializer 바로 밑에 새롭게 정의한 desc, color 필드이다. 이렇게 새롭게 필드를 정의하면, Meta의 Model에서 정의한 필드를 Override한다.

또는 만약 Comment 모델에서 정의하지 않은 field를 추가로 정의하고 싶다면 여기에 작성해주면 된다. 주의할 사항은 이렇게 추가적인 필드를 정의할때는 반드시 Meta의 fields에 값을 넣어줘야 한다는 것이다.

 

3. read_only_fields

Meta 클래스 내부에 정의하여 Response로 내보낼때만 사용할 필드값들을 정의한다.

 

 


 

 

Validate(self, data)

 

serializer 내부에 validate 메서드를 정의하면, serializer.is_valid()를 호출했을 때, reqeust의 body 값을 OrderedDict 형태로 받아온다.

 

(아래 디버깅화면에서는 data 대신 attrs로 표기함)

728x90
반응형