📍 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()
'PROJECT > 유화제작 Project' 카테고리의 다른 글
USD팀 U-NFT 프로젝트(유화 제작 프로젝트) KPT 회고 (0) | 2022.11.28 |
---|---|
Error 1. createsuperuser에 필드 추가 (0) | 2022.11.23 |
유화제작 Project - U-NFT S.A (0) | 2022.11.23 |