[英]email already exists while updating user in django rest framework
[英]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)
現在在這個鏈接的問題中,他們正在使用通用視圖並使用序列化程序來更新用戶實例:
接受的答案是:
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.