使用 APIVIEW 更新用户失败.用户对象已存在或创建新用户



我正在使用django rest框架,并且我创建了一个视图来更新用户。

以下是我的观点:

def put(self, request, *args, **kwargs):
authorization =UserSuitsPermissions().superuser(request.user)
userpk = kwargs.get('pk', 0)
user = get_object_or_404(STUser, pk=userpk)
if not authorization:
if request.user['id'] == user.id:
authorization = True
if authorization:
serializeddata = UserSerializer(data=request.data)
if serializeddata.is_valid(raise_exception=True):
data = serializeddata.validated_data
user.__dict__.update(**data)
user.save()
serialzed = UserSerializer(user)
return Response(serialzed.data)
return Response(status=status.HTTP_401_UNAUTHORIZED)

现在在这个链接的问题中,他们使用通用视图并使用序列化程序更新用户实例:

Django DRF 更新用户

接受的答案是:

def update(self, request, *args, **kwargs):
serializer = self.serializer_class(request.user, data=request.data, partial=True)
serializer.is_valid(raise_exception=True)
serializer.save()
return Response(serializer.data, status=status.HTTP_200_OK)

我不是在使用通用的观点,事实上我对它们的看法。我不重视它。所以问题是,我们如何通过 API 视图更新用户对象?

我最大的问题是接受答案中的这一行是否与我的代码相关?

serializer = self.serializer_class(request.user, data=request.data, partial=True)

so

我想通了。

正确的方法是将实例传递给序列化程序,然后在部分标志设置为 true 的情况下调用 Save。

代码如下所示:

serializeddata = UserSerializer(user, data=request.data, partial=True)
if serializeddata.is_valid(raise_exception=True):
serializeddata.save()
return Response(serializeddata.data)

完整视图如下所示:

def put(self, request, *args, **kwargs):
authorization =UserSuitsPermissions().superuser(request.user)
userpk = kwargs.get('pk', 0)
user = get_object_or_404(STUser, pk=userpk)
if not authorization:
if request.user['id'] == user.id:
authorization = True
if authorization:
serializeddata = UserSerializer(user, data=request.data, partial=True)
if serializeddata.is_valid(raise_exception=True):
serializeddata.save()
return Response(serializeddata.data)
return Response(status=status.HTTP_401_UNAUTHORIZED)

所以这很酷

相关内容

最新更新