Django Custom User Model не использует менеджер моделей при создании обычных пользователей

Я пытаюсь создать пользователя из ModelViewset фреймворка Django rest. (Однако я также пытался сделать то же самое с помощью обычной формы модели Django. В обоих случаях модель CustomUser не использует функцию create_user из Model manager.

Мои коды следующие:

Менеджер модели

class CustomUserManager(BaseUserManager):
    def create_user(self, email, phone, full_name, **other_fields):
        email = self.normalize_email(email)
        if not email:
            raise ValueError("User must have an email")
        if not full_name:
            raise ValueError("User must have a full name")
        if not phone:
            raise ValueError("User must have a phone number")

        user = self.model(
            email=self.normalize_email(email),
            phone=phone,
            full_name=full_name,
            is_active=True,
        )
        other_fields.setdefault('is_active', True)
        user.set_password(phone)
        user.save(using=self._db)
        return user

    def create_superuser(self, email, phone, full_name, password=None, **other_fields):
        if not email:
            raise ValueError("User must have an email")
        if not password:
            raise ValueError("User must have a password")
        if not full_name:
            raise ValueError("User must have a full name")
        if not phone:
            raise ValueError("User must have a phone number")

        user = self.model(
            email=self.normalize_email(email),
            full_name = full_name,
            phone = phone
        )
        user.set_password(password)  # change password to hash
        other_fields.setdefault('is_staff', True)
        other_fields.setdefault('is_superuser', True)
        other_fields.setdefault('is_active', True)
        user.save(using=self._db)
        return user

Модель:

class CustomUserModel(AbstractBaseUser, PermissionsMixin, AbstractModel):
    email = models.EmailField(unique=True)
    username = models.CharField( max_length=150, unique=True, null=True, blank=True)
    phone = PhoneNumberField(unique=True)
    full_name = models.CharField(max_length=50, null=True, blank=True)
    is_active = models.BooleanField(default=False)
    is_staff = models.BooleanField(default=False)

    objects = CustomUserManager()

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['phone', 'full_name']

    class Meta:
        verbose_name = 'User'
        verbose_name_plural = 'Users'

    def __str__(self):
        return f'{self.username} - {self.email}'

    def save(self, *args, **kwargs):
        if not self.username:
            uid = str(uuid4()).split('-')[1].upper()
            today = str(date.today()).replace('-', '').swapcase()
            splitted_uname = self.full_name.split(' ')[0][:2].upper()
            self.username = f'{splitted_uname}-{uid}{today}'
        super(CustomUserModel, self).save(*args, **kwargs)

Django REST Framework's ViewSet

class UserBaseViewSet(viewsets.ModelViewSet):
    allowed_methods = ('GET', 'POST', 'PATCH')
    serializer_class = serializers.UserBaseListSerializer
    queryset = CustomUserModel.objects.all()
    permission_classes = [IsProfileOwnerOrReadOnly, ]
    lookup_field = 'username'

    def get_serializer_class(self):
        if self.action == 'retrieve':
            return serializers.UserBaseDetailSerializer
        return super().get_serializer_class()

При создании суперпользователей из командной строки все работает отлично. Что я упускаю в этом процессе? Я отладил процесс, но класс модели никак не использует функцию create_user менеджера

Вам придется переопределить create из UserBaseListSerializer для вызова create_user менеджера:

class UserBaseListSerializer(serializers.ModelSerializer):
    ...
    def create(self, validated_data):
        return CustomUserModel.objects.create_user(**validated_data)
Вернуться на верх