I can't get `extra_fields` printend each time a new user is created

40 Views Asked by At

I'd like to know why I can't get extra_fields printed each time a new user is created. I'm working with a CustomUserModel and I want to allocate the created object to a specific group based on its role and give it a set of permissions in my application. However, it seems like there's no role in extra_fields given the fact that the if statement is skipped. Here is the code

# Manager
class CustomUserManager(BaseUserManager):
    def create_user(self, username, email=None, password=None, **extra_fields):
        # It's not printed
        print("Extra fields: ", extra_fields)

        if email is not None:
            email = self.normalize_email(email)

        user = self.model(username=username, email=email, **extra_fields)
        user.set_password(password)

        # Skipped
        if "role" in extra_fields:
            group, create = Group.objects.get_or_create(
                name=extra_fields["role"]
            )
            user.groups.add(group)

        user.save()
        return user

    def create_superuser(
        self, username, email=None, password=None, **extra_fields
    ):
        extra_fields.setdefault("is_staff", True)
        extra_fields.setdefault("is_superuser", True)
        extra_fields.setdefault("is_active", True)

        return self.create_user(username, email, password, **extra_fields)


# Model
class User(AbstractUser):
    class Roles(models.TextChoices):
        ADMIN = "ADMIN", "Admin"
        TEACHER = "TEACHER", "Teacher"
        STUDENT = "STUDENT", "Student"

    class Meta:
        db_table = "user"

    objects = CustomUserManager()
    default_role = Roles.ADMIN
    role = models.CharField(_("role"), max_length=10, choices=Roles.choices)

    def save(self, *args, **kwargs):
        if not self.pk:
            self.role = self.default_role
        return super().save(*args, **kwargs)

What am I missing and where what would be the best approach.

0

There are 0 best solutions below