如何解决带有 Django Rest Auth 的自定义注册表单 - 错误:save() 需要 1 个位置参数,但给出了 2 个
我想使用 Django Rest Auth 和 Django Allauth 创建自定义注册表单,但出现错误 save() takes 1 positional argument but 2 were given
我知道此错误与 Django Rest Auth 提供的函数 def save(self,request) 相关,但我不知道如何更改它。
我应该怎么做才能让它发挥作用?
# Models.py
class UserManager(BaseUserManager):
def create_user(self,email,password=None,**extra_fields):
"""Creates and saves a new user"""
if not email:
raise ValueError('Users must have an email address')
user = self.model(email=self.normalize_email(email),**extra_fields)
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self,password,**extra_fields):
"""Creates and saves a new super user"""
user = self.create_user(email,**extra_fields)
user.is_staff = True
user.is_superuser = True
user.save(using=self._db)
return user
class User(AbstractBaseUser,PermissionsMixin):
"""Custom user model that supports using email instead of username"""
email = models.EmailField(max_length=255,unique=True)
name = models.CharField(max_length=255)
age = models.PositiveIntegerField(null=True,blank=True)
is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=False)
objects = UserManager()
USERNAME_FIELD = 'email'
required_FIELDS = ['name','age']
def __str__(self):
return self.email
# serializers.py
class UserSerializer(serializers.ModelSerializer):
"""Serializer for the users object"""
class Meta:
model = get_user_model()
fields = ('email','password','name','age')
extra_kwargs = {'password': {'write_only': True,'min_length': 5}}
def create(self,validated_data):
"""Create a new user with encrypted password and return it"""
return get_user_model().objects.create_user(**validated_data)
def update(self,instance,validated_data):
"""Update a user,setting the password correctly and return it"""
password = validated_data.pop('password',None)
user = super().update(instance,**validated_data)
if password:
user.set_password(password)
user.save()
return user
def save(self,request):
# I would say that I need to change the default function
# settings. py
REST_AUTH_REGISTER_SERIALIZERS = {
'REGISTER_SERIALIZER': 'user.serializers.UserSerializer'
}
解决方法
为了解决这个问题,我只需将以下内容添加到我的序列化程序中:
class UserSerializer(serializers.ModelSerializer):
"""Serializer for the users object"""
class Meta:
model = get_user_model()
fields = ('email','password','name','age')
extra_kwargs = {'password': {'write_only': True,'min_length': 5}}
def create(self,validated_data):
"""Create a new user with encrypted password and return it"""
return get_user_model().objects.create_user(**validated_data)
def update(self,instance,validated_data):
"""Update a user,setting the password correctly and return it"""
password = validated_data.pop('password',None)
user = super().update(instance,**validated_data)
if password:
user.set_password(password)
user.save()
return user
def get_cleaned_data(self):
return {
'password': self.validated_data.get('password',''),'email': self.validated_data.get('email','name': self.validated_data.get('name','age': self.validated_data.get('age',}
def save(self,request):
self.cleaned_data = self.get_cleaned_data()
user = get_user_model().objects.create_user(**self.cleaned_data)
return user
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。