I am relatively new to Django, but just finished creating a custom user model rather then using the base. When running createsuperuser im getting the following error stack:
File "C:\Users\adamt\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\contrib\auth\base_user.py", line 66, in save super().save(*args, **kwargs) TypeError: save() got an unexpected keyword argument 'user'
My custom model, create_user
and create_superuser
are:
def create_user(self, email, username, FirstName, Surname, password=None):
if not email:
raise ValueError("Users must have an Email Address")
if not username:
raise ValueError("Users must have a Username")
if not FirstName:
raise ValueError("Users must have a First Name")
if not Surname:
raise ValueError("Users must have a Surname")
user = self.model(
email=self.normalize_email(email),
username=username,
FirstName=FirstName,
Surname=Surname,
)
user.set_password(password)
user.save(user=self._db)
return user
def create_superuser(self, email, username, FirstName, Surname, password):
user = self.create_user(
email=self.normalize_email(email),
username=username,
FirstName=FirstName,
Surname=Surname,
password=password,
)
user.is_admin = True
user.is_staff = True
user.is_superuser = True
user.save(user=self._db)
return user
class Account(AbstractBaseUser):
email = models.EmailField(verbose_name ="email", max_length=60, unique=True)
username = models.CharField(max_length=100, unique=True)
date_joined = models.DateTimeField(verbose_name="date joined", auto_now_add=True)
last_login = models.DateTimeField(verbose_name="last login", auto_now=True)
is_admin = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=False)
is_superuser = models.BooleanField(default=False)
DateofBirth = models.DateField(verbose_name="Date of Birth")
MarketingOptIn = models.BooleanField(verbose_name="Marketing Opt In", default=False)
FirstName = models.CharField(verbose_name="First Name", max_length=100)
Surname = models.CharField(verbose_name="Surname", max_length=100)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['username','FirstName','Surname', ]
objects = AccountManager()
def __str__(self):
return self.username
def has_perm(self, perm, obj=None):
return self.is_admin
def has_module_perms(self, app_label):
return True
I have clearly missed something but for the life of me can't see it. Any assistance would be great.
When you .save(…)
[Django-doc] a Model
object, you can use a using=…
parameter to specify the database, not , so:user=…
def create_user(self, email, username, FirstName, Surname, password=None):
# …
user.save(using=self._db)
return user
def create_superuser(self, email, username, FirstName, Surname, password):
# …
user.save(using=self._db)
return user