from django.contrib.auth.models import BaseUserManager class UserManager(BaseUserManager): use_in_migrations = True def create_user(self, username, email=None, password=None, **extra_fields): if not username: raise ValueError("Users must have a username") if not email: raise ValueError("Users must provide an email") email = self.normalize_email(email) user = self.model(username=username, email=email, **extra_fields) user.set_password(password) user.save(using=self._db) 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("role", "Admin") # Automatically Admin extra_fields.setdefault("phone_number", "") # Optional if extra_fields.get("is_staff") is not True: raise ValueError("Superuser must have is_staff=True") if extra_fields.get("is_superuser") is not True: raise ValueError("Superuser must have is_superuser=True") return self.create_user(username, email, password, **extra_fields)