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.