在使用Django Rest Framework (DRF) 和 Django Rest Auth 进行自定义注册表单时,如果你遇到错误信息 save() takes 1 positional argument but 2 were given
,这通常是因为你在重写的 save()
方法中没有正确地调用父类的 save()
方法。
Django Rest Auth 是一个用于 Django REST framework 的库,它提供了用户认证的功能,包括注册、登录、密码重置等。自定义注册表单允许你根据项目需求定制注册逻辑。
这个错误的原因是你重写的 save()
方法没有接受 commit
参数。在 Django 中,Model.save()
方法默认接受两个参数:self
和 commit
。当你重写这个方法时,需要确保也接受这两个参数,并且正确地调用父类的 save()
方法。
以下是一个示例,展示如何正确地重写 save()
方法:
from rest_framework import serializers
from rest_auth.registration.serializers import RegisterSerializer
from django.contrib.auth.models import User
class CustomRegisterSerializer(RegisterSerializer):
# 添加自定义字段
first_name = serializers.CharField(required=True)
last_name = serializers.CharField(required=True)
def get_cleaned_data(self):
return {
'username': self.validated_data.get('username', ''),
'password1': self.validated_data.get('password1', ''),
'email': self.validated_data.get('email', ''),
'first_name': self.validated_data.get('first_name', ''),
'last_name': self.validated_data.get('last_name', '')
}
def save(self, request):
user = super().save(request) # 调用父类的 save 方法
user.first_name = self.cleaned_data.get('first_name')
user.last_name = self.cleaned_data.get('last_name')
user.save()
return user
自定义注册表单在以下场景中非常有用:
通过以上方法,你可以解决 save() takes 1 positional argument but 2 were given
错误,并成功实现自定义注册表单。
领取专属 10元无门槛券
手把手带您无忧上云