Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python AssertionError:.validate()应返回已验证的数据_Python_Django_Django Rest Framework - Fatal编程技术网

Python AssertionError:.validate()应返回已验证的数据

Python AssertionError:.validate()应返回已验证的数据,python,django,django-rest-framework,Python,Django,Django Rest Framework,我能够访问PasswordChangeSerializer的validate()函数的用户\u queryset,但是我仍然收到此错误: 断言值不是None,'.validate()应返回已验证的数据' 序列化程序.py class PasswordChangeSerializer(serializers.ModelSerializer): old_password = serializers.CharField(write_only=True, required=True, max_

我能够访问
PasswordChangeSerializer
的validate()函数的用户\u queryset,但是我仍然收到此错误:

断言值不是None,'.validate()应返回已验证的数据'

序列化程序.py


class PasswordChangeSerializer(serializers.ModelSerializer):
    old_password = serializers.CharField(write_only=True, required=True, max_length=30)
    new_password = serializers.CharField(write_only=True, required=True, max_length=30)
    confirm_password = serializers.CharField(write_only=True, required=True, max_length=30)

    class Meta:
        model = User 
        fields = ['old_password', 'new_password', 'confirm_password']


    def validate(self, data):
        old_password = data['old_password']
        new_password = data['new_password']
        confirm_password = data['confirm_password']

        user_queryset = User.objects.all()

        if user_queryset.exists() and user_queryset.count() == 1:
            user_set = user_queryset.first()

            if not user_set.check_password(old_password):
                raise serializers.ValidationError({'old_password': 'Wrong password!'})

            if confirm_password != new_password:
                raise serializers.ValidationError({'password': 'Password must be confirmed correctly!'})

            return data

    def update(self, instance, validated_data):
        instance.set_password(validated_data['new_password'])
        instance.save()
        return instance
views.py


class PasswordChangeAPIView(APIView):
    permission_classes = [IsAdminUser]
    serializer_class = PasswordChangeSerializer

    def post(self, request, format=None):
        data = request.data
        password_ser = PasswordChangeSerializer(data=data)
        if password_ser.is_valid():
            password_ser.save()
            new_data = password_ser.data
            return Response(new_data, status=HTTP_201_CREATED)
        else:
            return Response({"msg":"invalid user!"}, status=HTTP_400_BAD_REQUEST)
            

您只需要返回数据。您已将return语句保留在
if
条件中。只要把它放在条件之外就行了

def validate(self, data):
        old_password = data['old_password']
        new_password = data['new_password']
        confirm_password = data['confirm_password']

        user_queryset = User.objects.all()

        if user_queryset.exists() and user_queryset.count() == 1:
            self.user_set = user_queryset.first()

            if not self.user_set.check_password(old_password):
                raise serializers.ValidationError({'old_password': 'Wrong password!'})

            if confirm_password != new_password:
                raise serializers.ValidationError({'password': 'Password must be confirmed correctly!'})

        return data
并改变你的观点如下

class PasswordChangeAPIView(APIView):
    permission_classes = [IsAdminUser]
    serializer_class = PasswordChangeSerializer

    def post(self, request, format=None):
        data = request.data
        password_ser = PasswordChangeSerializer(data=data)
        if password_ser.is_valid():
            user = password_ser.user_set
            user.set_password(data['new_password'])
            user.save()
            return Response(new_data, status=HTTP_201_CREATED)
        else:
            return Response({"msg":"invalid user!"}, status=HTTP_400_BAD_REQUEST)

然后我得到了这个错误<代码>类型错误:调用User.objects.create()时在
PasswordChangeAPIView
中调用
user\u set
的位置?self.user\u set=user\u queryset.first()@satyajitbarik它已经更新了。请在列表中检查,然后。。。我得到AttributeError:'PasswordChangeSerializer'对象没有属性'user\u set'