Django rest framework RetrieveUpdate

Сейчас я делаю API обновления профиля пользователя, используя drf с RetreiveUpadteAPIView

есть один вопрос, решение которого я не могу найти

При такой логике данные запроса хорошо обновляются в БД. Только пароль задается без хэширования, а просто обычным символом. даже этот измененный обычный символьный пароль также не совпадает с тем, что я задал.

Как я могу это исправить... Ваше наилучшее отношение

Вот мой код ниже.

#views.py

@permission_classes([IsAuthenticated])
class UpdatePartialUserView(RetrieveUpdateAPIView):
    queryset = User.objects.all()
    serializer_class = UserProfileSerializer
    def get_object(self):
        queryset = self.filter_queryset(self.get_queryset())

        obj = queryset.get(pk=self.request.user.id)
        self.check_object_permissions(self.request, obj)
        return obj
    
    def retrieve(self, request, *args, **kwargs):
        serializer = UserSerializer(request.user)
        return Response(status=status.HTTP_200_OK, data = serializer.data)

    def update(self, request, *args, **kwargs):
        partial = kwargs.pop('partial', False)
        self.object = self.get_object()
        serializer = self.get_serializer(request.user, data = request.data, partial=partial)
        # serializer = self.get_serializer(self.object, data = request.data, partial=partial)
        if not serializer.is_valid(raise_exception=True):
            return Response(status=status.HTTP_409_CONFLICT, data = {'message':serializer.errors})
        
        self.perform_update(serializer=serializer)
        self.object.set_password(request.data['password'])
        self.object.save()

        return Response(status=status.HTTP_202_ACCEPTED, data={"message": "success!"})

#serializers.py

class UserProfileSerializer(serializers.ModelSerializer):
    password = serializers.CharField(write_only=True, required=True)
    password2 = serializers.CharField(write_only=True, required=True)
    old_password = serializers.CharField(write_only=True, required=True)
    profile_img = serializers.ImageField(use_url=True, required = False)

    def validate(self, attrs):
        if attrs.get('password') != attrs.get('password2'):
            raise serializers.ValidationError({
                "password" : "비밀번호가 다릅니다."})
        return attrs

    def validate_old_password(self, value):
        #check user
        request = self.context.get('request')
        if request and hasattr(request, "user"):
            user = request.user

        if not user.check_password(value):
            raise serializers.ValidationError({
                "old_password" : "기존 비밀번호가 틀립니다."
            })
        return value

    class Meta:
        model = User
        fields = ['nick_name', 'wannabe', 'old_password', 'password', 'password2', 'profile_img']

Думаю, что-то вроде этого должно сработать.

def update(self, request, *args, **kwargs):
    partial = kwargs.pop('partial', False)
    self.object = self.get_object()
    serializer = self.get_serializer(request.user, data = request.data, partial=partial)

    if not serializer.is_valid(raise_exception=True):
        return Response(status=status.HTTP_409_CONFLICT, data = {'message':serializer.errors})

    self.object.set_password(new_password)
    self.object.update(
        nick_name=serializer.data["nickname"],
        wannabe=serializer.data["wannabe"],
        profile_img=serializer.data["profile_img"],
        )
    self.object.save()

    return Response(status=status.HTTP_202_ACCEPTED, data={"message": "success!"})
Вернуться на верх