error serializer.data when I'm not accesing it

Viewed 851

I have the error:

You cannot call .save() after accessing serializer.data.If you need to access data before committing to the database then inspect 'serializer.validated_data' instead.

Even if I'M NOT accesing serialized.data but serialized.validate_data.

Here is my code:

views.py

class Login(APIView):
    """
    Verify the login given is correct. #FIXME
    """
    def post(self, request, format=None):
        """Process the user given

        """

        serializer = LoginSerializer(data=request.data)

        if not serializer.is_valid():
            return Response(
                serializer.errors,
                status=status.HTTP_400_BAD_REQUEST
            )

        if serializer.verify_user(serializer.validated_data):
            serializer.save()
            return Response(
                serializer.data,
                status=status.HTTP_201_CREATED
            )

verify_user is a custom function I did. If I don't use validated_data in that function, save() is executing. If not It gives that message. Inside I don't modify validated_data:

serializers.py

class LoginSerializer(serializers.Serializer):
    """Interface fields for login api
    """

    username = serializers.CharField(max_length=50)
    password = serializers.CharField(max_length=255)
    origin = serializers.CharField(max_length=255, required=False)

    def verify_user(self, validated_data):
        """
        Try to authenticate a user with given credentials
        :return: True on success
        """

        password_valid = validated_data['password']
        username_valid = validated_data['username']
        # TODO: Put in utilities
        _password_crp = self.cryp_password(password_valid)

        # 1 verify new table
        user = User.objects.filter(
            username=username_valid,
            password=_password_crp
        )
        if user is None or user.count() == 0:
            return False
        return True
1 Answers
Related