簡體   English   中英

使用API​​VIEW更新用戶失敗。 用戶對象已經存在或創建新用戶

[英]updating a user using APIVIEW fails. User object either already exists or creates new user

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

o

我想到了。

正確的方法是將實例傳遞給序列化器,然后在partial標志設置為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)

所以很酷

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM