'Django & Djoser 'NoneType' object has no attribute 'lower' 'NoneType' object has no attribute 'lower'

I keep having an error whenever I try to PATCH in order to update a specific user info. As per Djoser documentation, the endpoint is located in /users/me/

https://djoser.readthedocs.io/en/latest/base_endpoints.html#user

Everything is working fine except this part. I have a Custom User model and overrided the default (again, as per documentation) 'current_user': 'accounts.serializers.UserCreateSerializer',

serializer.py

class UserCreateSerializer(UserCreateSerializer):
    class Meta(UserCreateSerializer.Meta):
        model = User
        read_only_fields = ('password'),
        fields = ('id', 'email', 'first_name', 'last_name', 'is_active')

models.py

class UserAccountManager(BaseUserManager):
    def create_user(self, email, password=None, **extra_fields):
        if not email:
            raise ValueError('Un email est obligatoire')

        email = self.normalize_email(email)
        user = self.model(email=email, **extra_fields)

        user.set_password(password)
        user.save()

        return user

    def create_superuser(self, email, password):
        user = self.create_user(email, password)

        user.is_superuser = True
        user.is_staff = True
        user.save()

        return user

class UserAccount(AbstractBaseUser, PermissionsMixin):
    email = models.EmailField(max_length=255, unique=True)
    first_name = models.CharField(max_length=255)
    last_name = models.CharField(max_length=255)
    phone = models.CharField(max_length=50)
    
    is_active = models.BooleanField(default=True)
    is_staff = models.BooleanField(default=False)

    USERNAME_FIELD = 'email'

    objects = UserAccountManager()

    def get_full_name(self):
        return self.first_name

    def get_short_name(self):
        return self.first_name

    def __str__(self):
        return self.email

What am I missing?

Edit with Traceback error

Environment:

Request Method: PATCH Request URL: http://127.0.0.1:8000/api/v1/users/me/

Django Version: 4.0 Python Version: 3.10.1 Installed Applications: ['django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'rest_framework', 'rest_framework.authtoken', 'corsheaders', 'djoser', 'companies', 'accounts'] Installed Middleware: ['django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'corsheaders.middleware.CorsMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware']

Traceback (most recent call last): File "C:\Users\minse\Desktop\Code snippets\Project\FluchtV0.4\env\lib\site-packages\django\core\handlers\exception.py", line 47, in inner response = get_response(request) File "C:\Users\minse\Desktop\Code snippets\Project\FluchtV0.4\env\lib\site-packages\django\core\handlers\base.py", line 181, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "C:\Users\minse\Desktop\Code snippets\Project\FluchtV0.4\env\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view return view_func(*args, **kwargs) File "C:\Users\minse\Desktop\Code snippets\Project\FluchtV0.4\env\lib\site-packages\rest_framework\viewsets.py", line 125, in view return self.dispatch(request, *args, **kwargs) File "C:\Users\minse\Desktop\Code snippets\Project\FluchtV0.4\env\lib\site-packages\rest_framework\views.py", line 509, in dispatch response = self.handle_exception(exc) File "C:\Users\minse\Desktop\Code snippets\Project\FluchtV0.4\env\lib\site-packages\rest_framework\views.py", line 469, in handle_exception self.raise_uncaught_exception(exc) File "C:\Users\minse\Desktop\Code snippets\Project\FluchtV0.4\env\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception raise exc File "C:\Users\minse\Desktop\Code snippets\Project\FluchtV0.4\env\lib\site-packages\rest_framework\views.py", line 506, in dispatch response = handler(request, *args, **kwargs) File "C:\Users\minse\Desktop\Code snippets\Project\FluchtV0.4\env\lib\site-packages\djoser\views.py", line 175, in me return self.partial_update(request, *args, **kwargs) File "C:\Users\minse\Desktop\Code snippets\Project\FluchtV0.4\env\lib\site-packages\rest_framework\mixins.py", line 82, in partial_update return self.update(request, *args, **kwargs) File "C:\Users\minse\Desktop\Code snippets\Project\FluchtV0.4\env\lib\site-packages\rest_framework\mixins.py", line 67, in update serializer.is_valid(raise_exception=True) File "C:\Users\minse\Desktop\Code snippets\Project\FluchtV0.4\env\lib\site-packages\rest_framework\serializers.py", line 227, in is_valid self._validated_data = self.run_validation(self.initial_data) File "C:\Users\minse\Desktop\Code snippets\Project\FluchtV0.4\env\lib\site-packages\rest_framework\serializers.py", line 429, in run_validation value = self.validate(value) File "C:\Users\minse\Desktop\Code snippets\Project\FluchtV0.4\env\lib\site-packages\djoser\serializers.py", line 54, in validate validate_password(password, user) File "C:\Users\minse\Desktop\Code snippets\Project\FluchtV0.4\env\lib\site-packages\django\contrib\auth\password_validation.py", line 47, in validate_password validator.validate(password, user) File "C:\Users\minse\Desktop\Code snippets\Project\FluchtV0.4\env\lib\site-packages\django\contrib\auth\password_validation.py", line 145, in validate if SequenceMatcher(a=password.lower(), b=value_part.lower()).quick_ratio() >= self.max_similarity:

Exception Type: AttributeError at /api/v1/users/me/ Exception Value: 'NoneType' object has no attribute 'lower'



Solution 1:[1]

Hey I got the same error while override Djoser's UserCreateSerializer

This solution works fine for me

class CustomUserCreateSerializer(UserCreateSerializer):
password = serializers.CharField(style={"input_type": "password"}, write_only=True)

class Meta(UserCreateSerializer.Meta):
    model = User
    fields = ('email', 'id', 'username', 'first_name', 'last_name', 'password')

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Iu_Le