【问题标题】:updating a user using APIVIEW fails. User object either already exists or creates new user使用 APIVIEW 更新用户失败。用户对象已经存在或创建新用户
【发布时间】:2018-10-26 23:31:41
【问题描述】:

我正在使用 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 Update User

接受的答案是:

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)

【问题讨论】:

    标签: django-rest-framework put user-object


    【解决方案1】:

    太棒了

    我想通了。

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

    代码如下所示:

    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)
    

    这很酷

    【讨论】:

      猜你喜欢
      • 2012-12-25
      • 2017-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-11
      • 2020-08-18
      相关资源
      最近更新 更多