2

In the following code, I am receiving an error stating: Non-default argument follows default argument.

Would anyone happen to know how to resolve this?

class MyUserManager(BaseUserManager):
    def _create_user(self, email, first_name=None, last_name=None, username=None,
                     password, is_staff, is_superuser, **extra_fields):
        now = timezone.now()

        if not email:
            raise ValueError('Users must have an email.')

        email = self.normalize_email(email)

        if first_name and last_name:
            potential_username = slugify(
                "{0} {1}".format(first_name, last_name))

            try:
                check_user = self.model.get(
                    username=potential_username).exists()
            except check_user.DoesNotExist:
                check_user = None

            if not check_user:
                username = potential_username

        user = self.model(email=email,
                          username=username,
                          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, email, first_name, last_name, username,
                    password=None, **extra_fields):
        return self._create_user(email, password, is_staff=False,
                                 is_superuser=False, **extra_fields)

    def create_superuser(self, email, username, password, **extra_fields):
        return self._create_user(email, password, is_staff=True,
                                 is_superuser=True, **extra_fields)
jape
  • 2,861
  • 2
  • 26
  • 58

1 Answers1

2

This is not allowed

def _create_user(self, email, first_name=None, last_name=None, username=None,
                 password, is_staff, is_superuser, **extra_fields):

You are assignging defaults to first_name, last_name and username but not to password, staff etc. You will either have to change their order or you will need to assign defaults to the parameters that follow username.

Example:

def _create_user(self, email, 
 password, is_staff, is_superuser,
 first_name=None, last_name=None,
 username=None,**extra_fields):
e4c5
  • 52,766
  • 11
  • 101
  • 134