serializers.Serializer 상속 시 메서드 작성 규칙

송용진·2025년 8월 26일

Python / Django

목록 보기
16/24

1. validate_<field_name>(self, value)

역할

해당 필드 하나에 대한 유효성 검사 수행

호출 시점

is_valid() 호출 시 자동으로 호출됨

매개변수

그 필드의 value만 인자로 받음

반환값

반드시 정제된 value를 반환해야 함
예) .strip()이나 .lower() 적용 등

def validate_email(self, value):
    value = value.strip().lower()
    if not value.endswith("@example.com"):
        raise serializers.ValidationError("example.com 도메인만 허용됩니다.")
    return value

2.validate(self, data)

역할

여러 필드 간의 상호검증 / 논리관계 검증에 사용

호출 시점

validate_< field>()들이 모두 성공한 후 자동으로 호출됨

매개변수

모든 유효성 검사를 통과한 data 딕셔너리

반환값

최종적으로 정제된 data를 반환해야 함

def validate(self, data):
    if data['new_password1'] != data['new_password2']:
        raise serializers.ValidationError("비밀번호가 일치하지 않습니다.")
    return data

주의할 점

validate_< field>()은 단일 필드만 보며 다른 필드 값은 볼 수 없음
validate()는 모든 필드 값을 다 볼 수 있음
에러 메시지는 일반적으로 프론트에 전달되기 때문에,
사용자 친화적인 문장으로 작성해야 함

DRF 내부 동작 순서

  1. 필드 레벨 validation (ex: validate_email)
  2. 전체 레벨 validation (ex: validate)
  3. is_valid() 호출 시 에러 있으면 .errors에 자동 저장됨
  4. 이후 .save()나 validated_data 접근 가능
profile
개발자

0개의 댓글