본문 바로가기
PROJECT/유화제작 Project

Error2. 패스워드 validate 후 password2 제거

by JUNG씨 2022. 11. 23.

📍 TypeError: User() got unexpected keyword arguments: 'password2'

-> serializer에서 임의로 password2를 지정해주고 password와 password2가 일치하는지 확인해준 후 create메소드에서 user를 저장하니까 아래와 같은 에러가 발생했다!!!

 

Traceback (most recent call last):
  File "/Users/hyunjoojung/Desktop/UNFT-django/venv/lib/python3.8/site-packages/rest_framework/serializers.py", line 962, in create
    instance = ModelClass._default_manager.create(**validated_data)
  File "/Users/hyunjoojung/Desktop/UNFT-django/venv/lib/python3.8/site-packages/django/db/models/manager.py", line 85, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/Users/hyunjoojung/Desktop/UNFT-django/venv/lib/python3.8/site-packages/django/db/models/query.py", line 669, in create
    obj = self.model(**kwargs)
  File "/Users/hyunjoojung/Desktop/UNFT-django/venv/lib/python3.8/site-packages/django/db/models/base.py", line 565, in __init__
    raise TypeError(
TypeError: User() got unexpected keyword arguments: 'password2'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/hyunjoojung/Desktop/UNFT-django/venv/lib/python3.8/site-packages/django/core/handlers/exception.py", line 55, in inner
    response = get_response(request)
  File "/Users/hyunjoojung/Desktop/UNFT-django/venv/lib/python3.8/site-packages/django/core/handlers/base.py", line 197, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/Users/hyunjoojung/Desktop/UNFT-django/venv/lib/python3.8/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
    return view_func(*args, **kwargs)
  File "/Users/hyunjoojung/Desktop/UNFT-django/venv/lib/python3.8/site-packages/django/views/generic/base.py", line 103, in view
    return self.dispatch(request, *args, **kwargs)
  File "/Users/hyunjoojung/Desktop/UNFT-django/venv/lib/python3.8/site-packages/rest_framework/views.py", line 509, in dispatch
    response = self.handle_exception(exc)
  File "/Users/hyunjoojung/Desktop/UNFT-django/venv/lib/python3.8/site-packages/rest_framework/views.py", line 469, in handle_exception
    self.raise_uncaught_exception(exc)
  File "/Users/hyunjoojung/Desktop/UNFT-django/venv/lib/python3.8/site-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
    raise exc
  File "/Users/hyunjoojung/Desktop/UNFT-django/venv/lib/python3.8/site-packages/rest_framework/views.py", line 506, in dispatch
    response = handler(request, *args, **kwargs)
  File "/Users/hyunjoojung/Desktop/UNFT-django/users/views.py", line 19, in post
    serializer.save()
  File "/Users/hyunjoojung/Desktop/UNFT-django/venv/lib/python3.8/site-packages/rest_framework/serializers.py", line 212, in save
    self.instance = self.create(validated_data)
  File "/Users/hyunjoojung/Desktop/UNFT-django/users/serializers.py", line 40, in create
    user = super().create(validated_data)
  File "/Users/hyunjoojung/Desktop/UNFT-django/venv/lib/python3.8/site-packages/rest_framework/serializers.py", line 981, in create
    raise TypeError(msg)
TypeError: Got a `TypeError` when calling `User.objects.create()`. This may be because you have a writable field on the serializer class that is not a valid argument to `User.objects.create()`. You may need to make the field read-only, or override the UserSerializer.create() method to handle this correctly.
Original exception was:
 Traceback (most recent call last):
  File "/Users/hyunjoojung/Desktop/UNFT-django/venv/lib/python3.8/site-packages/rest_framework/serializers.py", line 962, in create
    instance = ModelClass._default_manager.create(**validated_data)
  File "/Users/hyunjoojung/Desktop/UNFT-django/venv/lib/python3.8/site-packages/django/db/models/manager.py", line 85, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/Users/hyunjoojung/Desktop/UNFT-django/venv/lib/python3.8/site-packages/django/db/models/query.py", line 669, in create
    obj = self.model(**kwargs)
  File "/Users/hyunjoojung/Desktop/UNFT-django/venv/lib/python3.8/site-packages/django/db/models/base.py", line 565, in __init__
    raise TypeError(
TypeError: User() got unexpected keyword arguments: 'password2'
TypeError: User() got unexpected keyword arguments: 'password2'

-> 모델에서 정의되지 않은 password2까지 create하려고 해서 발생하는 오류이다. 위 코드로 print(validate_data)를 해보면

# print(validated_data)
{'email': 'abcde@naver.com', 'username': 'abcde', 'password': 'asgdljasgd1234!', 'password2': 'asgdljasgd1234!', 'usd': 100000}

이렇게 password2까지 같이 넘어오는것을 확인할 수 있다. 그래서 이 password2를 user가 create되기 전에 꺼내주는 코드가 필요했다!

 

 

 

 

🔑 해결 : validated_data.pop()