Обновление пользовательского REST фреймворка Django - PullRequest
0 голосов
/ 29 сентября 2018

Мне нужно обновить моего пользователя в REST framework

views.py

class UserUpdate(APIView):
    permission_classes = (permissions.IsAuthenticated,)

    def post(self,request):
        user=User.objects.get(id=request.user.id)
        try:
            user_serializer=UserSerializer(request.user,data=request.data, partial=True)
            if user_serializer.is_valid():
                user_serializer.save()
                return Response(user_serializer.data, status=status.HTTP_201_CREATED)
            else:
                return Response(user_serializer.errors, status=status.HTTP_400_BAD_REQUEST)
        except:
            return JsonResponse({'status':0,'message':'Error on user update'})

serializers.py

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ['id', 'first_name', 'last_name', 'avatar']

models.py

class User(AbstractUser):
    fb_userid = models.CharField(max_length=256)
    avatar = models.ImageField(upload_to='avatars/', blank=True, null=True)

ответ: DETAIL: ключ (имя пользователя) = () уже существует.

enter image description here

Ответы [ 3 ]

0 голосов
/ 01 октября 2018

@ YKH прав, этот код хорош, в ваших данных POST может быть ошибка.

На вашем изображении вы передаете два параметра в Заголовок .Возможно, вы передаете неправильный заголовок. Content-Type не должно быть для данных формы

0 голосов
/ 01 октября 2018

Я нашел этот пост, где у кого-то есть проблема, похожая на вашу: Django Rest Framework не в состоянии проанализировать данные нескольких частей / форм

На вашей картинке видно, что вы помещаете что-то в заголовкивкладка.Почтальон позаботится об этом за вас, поэтому вы не должны ничего там определять.Не могли бы вы попробовать еще раз, не задавая ничего в заголовках?

0 голосов
/ 29 сентября 2018
   def post(self,request):
        user_serializer=UserSerializer(request.user, data=request.data, partial=True)
        if user_serializer.is_valid():
            user_serializer.save()
            return Response(user_serializer.data, status=status.HTTP_200_OK)
        else:
            return Response(user_serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...