django save()接受1个位置参数,但给出了2个

时间:2020-08-07 17:19:53

标签: django django-serializer django-rest-auth django-custom-user

我正在生成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

1 个答案:

答案 0 :(得分:0)

尝试更改

def save(self, request):
   ...

def save(self, request, *args, **kwargs):
   ...