while creating a custom user through the postman api on django im facing this repetedly. please help me to resolve this

models.py

ROLES = (
    (1, 'admin'),
    (2, 'customer'),
    (3, 'seller'),
)
STATE_CHOICES = (
    ('Odisha', 'Odisha'),
    ('Karnataka', 'Karnataka')
)
class UserManager(BaseUserManager):
    def create_user(self, email, password, **extra_fields):
        if not email:
            raise ValueError('The email is not given')
        email = self.normalize_email(email)
        user = self.model(email=email, **extra_fields)
        user.is_active = True
        user.set_password(password)
        user.save()
        return user

    def create_superuser(self, email, password, **extra_fields):
        extra_fields.setdefault('is_staff', True)
        extra_fields.setdefault('is_superuser', True)
        extra_fields.setdefault('is_active', True)

        if not extra_fields.get('is_staff'):
            raise ValueError('Superuser must have is_staff = True')

        if not extra_fields.get('is_superuser'):
            raise ValueError('Superuser must have is_superuser = True')
        return self.create_user(email, password, **extra_fields)

class Roles(models.Model):
    role = models.SmallIntegerField(choices=ROLES)

class Custom_User(AbstractBaseUser, PermissionsMixin):
    email = models.EmailField(max_length=100, unique=True)
    password = models.CharField(max_length=100)
    first_name = models.CharField(max_length=100, null=True, blank=True)
    last_name = models.CharField(max_length=100, null=True, blank=True)
    role = models.ForeignKey(Roles, on_delete=models.CASCADE)
    is_staff = models.BooleanField(default=False)
    is_superuser = models.BooleanField(default=False)
    is_active = models.BooleanField(default=True)

    def add_to_group(self):
        role_instance = self.role
        group_name = None

        if role_instance.role == 4:
            group_name = 'admin'
        elif role_instance.role == 5:
            group_name = 'customer'
        elif role_instance.role == 6:
            group_name = 'seller'

        if group_name:
            group, created = Group.objects.get_or_create(name=group_name)
            self.groups.set([group])

        return self

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['role']

    objects = UserManager()

    def __str__(self):
        return self.email
    
    def has_module_perms(self, app_label):
        return True
    
    def has_perm(self, onj=None):
        return True

serializers.py:

# Create User
class CreateUserSerializer(serializers.ModelSerializer):
    class Meta:
        model = Custom_User
        fields = '__all__'
        extra_kwargs = {
            'first_name': {'required': True},
            'last_name': {'required': True},
            'password': {'required': True}
        }

    def validate(self, attrs):
        email = attrs.get('email', '').strip().lower()
        if Custom_User.objects.filter(email=email).exists():
            raise serializers.ValidationError("Email already exists")
        return attrs

    def create(self, validated_data):
        user = Custom_User.objects.create_user(**validated_data)
        return user

view.py

class Create_User_API(CreateAPIView):
    queryset = Custom_User.objects.all()
    serializer_class = CreateUserSerializer
    permission_classes=(AllowAny,)
    def perform_create(self, serializer):
        # Call the parent perform_create method to create the user
        user = serializer.save()
        
        # Call the add_to_group method to assign the user to the appropriate group
        user.add_to_group()

the problem arises when later i included the permissionsMixin class

Please help me to resolve this issue... tried different approach but still can't able to find the solution for this error

0

There are 0 answers