我正在生成django rest auth自定义用户。实施并测试了序列化程序并查看了成员资格注册后,按post后将出现以下错误:
/ signUp save()处的TypeError带有1个位置参数,但给出了2个
我认为这是串行器的问题,但我不知道确切的原因。你能帮助我吗?这是我的代码。
serializers.py
from rest_framework_simplejwt.serializers import TokenObtainSerializer
from .models import User
from rest_framework import serializers
from rest_auth.registration.serializers import RegisterSerializer
from allauth.account import app_settings as allauth_settings
from allauth.utils import email_address_exists
from allauth.account.adapter import get_adapter
from allauth.account.utils import setup_user_email
from django.utils.translation import ugettext_lazy as _
class CustomRegisterSerializer(RegisterSerializer):
nickname = serializers.CharField(required=True)
profile = serializers.ImageField(use_url=True)
def validate_email(self, email):
email = get_adapter().clean_email(email)
if allauth_settings.UNIQUE_EMAIL:
if email and email_address_exists(email):
raise serializers.ValidationError(
_("A user is already registered with this e-mail address."))
return email
def validate_password1(self, password):
return get_adapter().clean_password(password)
def get_cleaned_data(self):
return {
'email': self.validated_data.get('email', ''),
'password': self.validated_data.get('password', ''),
'nickname': self.validated_data.get('nickname', ''),
'profile': self.validated_data.get('profile', ''),
}
def save(self, request):
adapter = get_adapter()
user = adapter.new_user(request)
self.cleaned_data = self.get_cleaned_data()
adapter.save_user(request, user, self)
setup_user_email(request, user, [])
user.save()
return user
class userSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('email','password', 'nickname','profile')
views.py
class customSignUpView (RegisterView) :
serializer_class = userSerializer
models.py
class UserManager(BaseUserManager):
use_in_migrations = True
def create_user(self, email, profile, nickname, password):
user = self.model(
email=self.normalize_email(email),
nickname=nickname,
profile=profile,
)
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self, email, password, nickname, profile):
user = self.create_user(
email=self.normalize_email(email),
password=password,
nickname=nickname,
profile=profile,
)
user.staff = True
user.admin = True
user.save(using=self._db)
return user
class User(AbstractBaseUser, PermissionsMixin):
username = None
email = models.EmailField(_('email address'), unique=True)
nickname = models.CharField(max_length=10)
profile = models.ImageField(default='default_image.jpeg')
objects = UserManager()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['nickname', 'profile']
回溯
Traceback (most recent call last):
File "D:\school\대회 및 프로젝트\CoCo\venv\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
response = get_response(request)
File "D:\school\대회 및 프로젝트\CoCo\venv\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "D:\school\대회 및 프로젝트\CoCo\venv\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "D:\school\대회 및 프로젝트\CoCo\venv\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
return view_func(*args, **kwargs)
File "D:\school\대회 및 프로젝트\CoCo\venv\lib\site-packages\django\views\generic\base.py", line 71, in view
return self.dispatch(request, *args, **kwargs)
File "D:\school\대회 및 프로젝트\CoCo\venv\lib\site-packages\django\utils\decorators.py", line 43, in _wrapper
return bound_method(*args, **kwargs)
File "D:\school\대회 및 프로젝트\CoCo\venv\lib\site-packages\django\views\decorators\debug.py", line 76, in sensitive_post_parameters_wrapper
return view(request, *args, **kwargs)
File "D:\school\대회 및 프로젝트\CoCo\venv\lib\site-packages\rest_auth\registration\views.py", line 46, in dispatch
return super(RegisterView, self).dispatch(*args, **kwargs)
File "D:\school\대회 및 프로젝트\CoCo\venv\lib\site-packages\rest_framework\views.py", line 505, in dispatch
response = self.handle_exception(exc)
File "D:\school\대회 및 프로젝트\CoCo\venv\lib\site-packages\rest_framework\views.py", line 465, in handle_exception
self.raise_uncaught_exception(exc)
File "D:\school\대회 및 프로젝트\CoCo\venv\lib\site-packages\rest_framework\views.py", line 476, in raise_uncaught_exception
raise exc
File "D:\school\대회 및 프로젝트\CoCo\venv\lib\site-packages\rest_framework\views.py", line 502, in dispatch
response = handler(request, *args, **kwargs)
File "D:\school\대회 및 프로젝트\CoCo\venv\lib\site-packages\rest_framework\generics.py", line 190, in post
return self.create(request, *args, **kwargs)
File "D:\school\대회 및 프로젝트\CoCo\venv\lib\site-packages\rest_auth\registration\views.py", line 65, in create
user = self.perform_create(serializer)
File "D:\school\대회 및 프로젝트\CoCo\venv\lib\site-packages\rest_auth\registration\views.py", line 73, in perform_create
user = serializer.save(self.request)
TypeError: save() takes 1 positional argument but 2 were given
答案 0 :(得分:0)
尝试更改
def save(self, request):
...
到
def save(self, request, *args, **kwargs):
...