Django,save()缺少1个必需的位置参数“request”

2024-04-26 10:13:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着以自定义用户模式创建用于电子邮件登录的用户,但它不起作用。 save()缺少1个必需的位置参数“request”。 我怎样才能解决这个问题,请帮帮我。在

这是回溯。。在

File“/Users/maxx/.local/share/virtualenvs/testauth--sM0sqjl/lib/python3.6/site-packages/rest\u framework/视图.py“,480号线,正在调度 response=handler(请求,*args,**kwargs) File“/Users/maxx/Documents/workspace/python3/testauth/Users”/视图.py“,第12行,在邮政局 用户=序列化程序.save() TypeError:save()缺少1个必需的位置参数:“request”

在模型.py在

class UserManger(BaseUserManager):

use_in_migrations = True

def _create_user(self, email, password, **extra_fields):
    if not email:
        raise ValueError('You must give email address')
    email = self.normalize_email(email)
    user = self.model(email=email, **extra_fields)
    user.set_password(password)
    user.save(using=self._db)
    return user

def create_user(self, email, password=None, **extra_fields):
    extra_fields.setdefault('is_staff', False)
    extra_fields.setdefault('is_superuser', False)
    return self._create_user(email, password, **extra_fields)

def create_superuser(self, email, password, **extra_fields):
    extra_fields.setdefault('is_staff', True)
    extra_fields.setdefault('is_superuser', True)
    return self._create_user(email, password, **extra_fields)


class User(AbstractBaseUser):

email = models.EmailField(unique=True)
nick_name = models.CharField(max_length=50)
is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=False)
is_superuser = models.BooleanField(default=False)
created_at = models.DateTimeField(auto_now_add=True)

USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []

objects = UserManger()


def __str__(self):
    return self.email

def get_full_name(self):
    return self.email

def get_short_name(self):
    return self.email

def has_perm(self, perm, obj=None):
    return True

def has_module_perms(self, app_label):
    return True

在序列化程序.py在

^{pr2}$

在视图.py在

class UserCreateView(APIView):

def post(self, request):
    serializer = RegisterSerializer(data=request.data)
    if serializer.is_valid():
        user = serializer.save()
        if user:
            token = Token.objects.create(user=user)
            json = serializer.data
            json['token'] = token.key
            return Response(json, status=status.HTTP_201_CREATED)

    return Response(data=serializer.errors ,status=status.HTTP_400_BAD_REQUEST)

Tags: pyselftruefieldsreturnismodelsemail
1条回答
网友
1楼 · 发布于 2024-04-26 10:13:32

在您的RegisterSerializer中,您实现了一个save()方法,该方法需要一个名为request的位置参数,在UserCreateView中,您需要在该方法调用中包含该请求。在

class UserCreateView(APIView):

def post(self, request):
    serializer = RegisterSerializer(data=request.data)
    if serializer.is_valid():
        user = serializer.save(request) # <   INCLUDE REQUEST
        if user:
            token = Token.objects.create(user=user)
            json = serializer.data
            json['token'] = token.key
            return Response(json, status=status.HTTP_201_CREATED)

    return Response(data=serializer.errors ,status=status.HTTP_400_BAD_REQUEST)

相关问题 更多 >