Django Rest Framework (DRF) unique field serializer.is_valid() 자동 중복체크

Django rest framework에서 

아래와 같이 username 대신 email을 키로 갖는 유저테이블을 정의했다.


```

class User(AbstractUser):

    username = None

    email = Emailfield(unique=True)

```



그리고 serializer를 이용해서 validation 체크를 하려고 했다.


```

class SignupSerializer(ModelSerializer):

    class Meta:

        model = User

        field = ("email",)


    def validate_email(self, email):

        return email.lower()

```



위와같이 validation 함수에는 이메일을 소문자로 치환하는 로직만 넣어줬다.

view단에서 이메일 중복체크를 하려고 했다.


```

class SignupView(GenericAPIView):

    serializer_class = SignupSerializer


    def post(self, request):

        serializer = self.get_serializer(data = request.data)

        serializer.is_valid(raise_exception = True)

        ...

```


위와 같이 

이메일 중복체크를 아직 하지 않았음에도 불구하고,

serializer.is_valid()에서 중복체크를 해준다.

아무리 찾아봐도 관련 docs를 찾지 못했다. stackoverflow에서 비슷한 질문이 있었지만

원하는 답변이 없다. (https://stackoverflow.com/questions/64029496/validate-unique-email-django-rest-framework-serializer)


아마 내부적으로

unique field에 자동으로 rest_framework.validators.UniqueValidator

를 붙여주는게 아닐까 싶다. 


혹시 관련해서 아는 내용이 있으면 댓글 부탁드립니다.

No comments:

Post a Comment