Вот как код метода _create_user, create_super_user и create_user.
def _create_user(self, username, email, password,
is_staff, is_superuser, **extra_fields):
"""
Creates and saves a User with the given username, email and password.
"""
now = timezone.now()
if not username:
raise ValueError('The given username must be set')
email = self.normalize_email(email)
user = self.model(username=username, email=email,
is_staff=is_staff, is_active=True,
is_superuser=is_superuser, last_login=now,
date_joined=now, **extra_fields)
user.set_password(password)
user.save(using=self._db)
return user
def create_user(self, username, email=None, password=None, **extra_fields):
return self._create_user(username, email, password, False, False,
**extra_fields)
def create_superuser(self, username, email, password, **extra_fields):
return self._create_user(username, email, password, True, True,
**extra_fields)
Как вы можете видеть, что create_user и create_super_user метод вызова функции _create_user. Подчеркивание в начале метода означает, что функция предназначена только для внутреннего использования. Хорошо переопределить внутренний метод, но, по моему мнению, лучше по дизайну переопределить общедоступный метод.