我正在开发一个 Django 项目,我尝试使用 Django Rest Framework 为新注册的用户创建一个身份验证令牌。然而,当运行注册函数时,我遇到了以下错误:
ValueError: Cannot assign "<User: Test>": "Token.user" must be a "User" instance.
这里是发生错误的寄存器函数:
@api_view(['POST'])
def register(request):
serializer = UserSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
user = User.objects.get(username=request.data['username'])
user.hash_password(request.data['password'])
user.save()
token = Token.objects.create(user=user) # This is where the error occurs
return Response({
'token': token.key,
'User': serializer.data
}, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
如何修复此错误并成功为新注册用户创建身份验证令牌?
我尝试使用 Django Rest Framework 视图中的注册功能来注册新用户。我期望用户成功注册(在数据库中注册)并生成与该用户关联的身份验证令牌。
ValueError: Cannot assign "<User: Test>": "Token.user" must be a "User" instance.
错误通常意味着“user”对象不是 Token.user 字段期望的模型实例。
您的代码看起来是正确的,在
serializer.save()
之后,返回值是 User 模型的实例。但是,第 hash_password
行中的 user.hash_password(request.data['password'])
不是用户模型的标准 Django 方法。请确保此方法存在于您的 User 模型中并返回 User 实例,而不是字符串或其他内容。此外,此方法可能与 set_password
执行相同的工作,它已经是 Django 用户模型的一部分。