【问题标题】:django save() takes 1 positional argument but 2 were givendjango save() 接受 1 个位置参数,但给出了 2 个
【发布时间】:2020-08-07 17:19:53
【问题描述】:

我正在制作 django rest auth 自定义用户。实现并测试了用于会员注册的序列化器和视图,按post后出现如下错误:

/signUp save() 处的 TypeError 采用 1 个位置参数,但给出了 2 个

我认为这是序列化程序的问题,但我不知道确切原因。你能帮助我吗?这是我的代码。

序列化器.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

【问题讨论】:

  • 看起来错误在signUp 视图中。请分享视图和完整回溯。
  • @WillemVanOnsem 我编辑了它!
  • user = serializer.save(self.request) 我想应该是serializer.save()
  • @ItsMilann 我在我的代码中找不到它。你说的是哪一部分?

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


【解决方案1】:

尝试改变

def save(self, request):
   ...

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-13
    • 2020-10-30
    • 1970-01-01
    • 1970-01-01
    • 2018-01-05
    • 1970-01-01
    • 2019-04-20
    相关资源
    最近更新 更多