TypeError: create_superuser() missing 1 required positional argument: 'profile_picture'
Solution 1
Well, you need to create the create_superuser
function as well:
class UserManager(BaseUserManager):
def create_user(self, email, full_name, profile_picture, password=None, is_admin=False, is_staff=False, is_active=True):
if not email:
raise ValueError("User must have an email")
if not password:
raise ValueError("User must have a password")
if not full_name:
raise ValueError("User must have a full name")
user = self.model(
email=self.normalize_email(email)
)
user.full_name = full_name
user.set_password(password) # change password to hash
user.profile_picture = profile_picture
user.admin = is_admin
user.staff = is_staff
user.active = is_active
user.save(using=self._db)
return user
def create_superuser(self, email, full_name, profile_picture, password=None, **extra_fields):
if not email:
raise ValueError("User must have an email")
if not password:
raise ValueError("User must have a password")
if not full_name:
raise ValueError("User must have a full name")
user = self.model(
email=self.normalize_email(email)
)
user.full_name = full_name
user.set_password(password)
user.profile_picture = profile_picture
user.admin = True
user.staff = True
user.active = True
user.save(using=self._db)
return user
Good Luck!
Solution 2
You can add username
to REQUIRED_FIELDS. After that python manage.py createsuperuser
asks for username field and works.
REQUIRED_FIELDS = ['full_name', 'gender', 'username]
Solution 3
I had the same problem, it turned out that in the list named REQUIRED_FIELDS was misnamed. That list tells the django framework to ask for name as well during the creation. Because it is not asking and you've made it necessary. I hope it helps, best of luck
Solution 4
Better to create a class in 0001.initial.py file of migrations. Define a class with all required fields for login and provide dependencies and operations blocks empty.That's it
Solution 5
Make a 0001_initial.py file inside the migrations folder and follow up the below code it will work...
from django.db import migrations
from api.user.models import CustomUser
class Migration(migrations.Migration):
def seed_data(apps, schema_editor):
user = CustomUser(name='name',
email='[email protected]',
is_staff=True,
is_superuser=True,
phone='987654321',
gender='Male'
)
user.set_password('anypassword')
user.save()
dependencies=[
]
operations=[
migrations.RunPython(seed_data),
]
![Ankush paul](https://lh5.googleusercontent.com/-v7a6wdIKms0/AAAAAAAAAAI/AAAAAAAAAIg/lejpa7KfXWM/photo.jpg?sz=256)
Ankush paul
Good_at : c, c++, php, front-end, designing(Sketches), Fixing. Basics : js, java, python, django-rest Night-Freak Day's are crap
Updated on July 05, 2022Comments
-
Ankush paul almost 2 years
I get the following error after adding the
profile_picture
field:TypeError: create_superuser() missing 1 required positional argument: 'profile_picture'
This profile_picture field is an "ImageField" set as "Null = True".
I have tried the following:
def create_user(...., profile_picture=None, ....)
. It didn't work.and the error occurs only in command prompt when i create superuser from there.
Here is my models.py
from django.db import models from django.contrib.auth.models import BaseUserManager, AbstractBaseUser class UserManager(BaseUserManager): def create_user(self, email, full_name, profile_picture=None, gender=None, password=None, is_admin=False, is_staff=False, is_active=True): if not email: raise ValueError("User must have an email") if not password: raise ValueError("User must have a password") if not full_name: raise ValueError("User must have a full name") user = self.model( email=self.normalize_email(email) ) user.full_name = full_name user.set_password(password) # change password to hash # user.profile_picture = profile_picture user.gender = gender user.admin = is_admin user.profile_picture = profile_picture user.staff = is_staff user.active = is_active user.save(using=self._db) return user def create_staffuser(self, email, profile_picture, gender, full_name, password=None): user = self.create_user( email, full_name, profile_picture, gender, password=password, is_staff=True, ) return user def create_superuser(self, email, profile_picture, gender, full_name, password=None): user = self.create_user( email, full_name, profile_picture, gender, password=password, is_staff=True, is_admin=True, ) return user class User(AbstractBaseUser): username = models.CharField(max_length=255) full_name = models.CharField(max_length=255) email = models.EmailField(max_length=255, unique=True,) profile_picture = models.ImageField(upload_to='user_data/profile_picture', null=True, blank=True) gender = models.CharField(max_length=255, blank=True, default='rather_not_say') active = models.BooleanField(default=True) staff = models.BooleanField(default=False) # a admin user; non super-user admin = models.BooleanField(default=False) # a superuser # notice the absence of a "Password field", that's built in. USERNAME_FIELD = 'email' REQUIRED_FIELDS = ['full_name', 'gender'] # Email & Password are required by default. objects = UserManager() def get_full_name(self): # The user is identified by their email address return self.email def get_short_name(self): # The user is identified by their email address return self.email def __str__(self): # __unicode__ on Python 2 return self.email @staticmethod def has_perm(perm, obj=None): # "Does the user have a specific permission?" # Simplest possible answer: Yes, always return True @staticmethod def has_module_perms(app_label): # "Does the user have permissions to view the app `app_label`?" # Simplest possible answer: Yes, always return True @property def is_staff(self): # "Is the user a member of staff?" return self.staff @property def is_admin(self): # "Is the user a admin member?" return self.admin @property def is_active(self): # "Is the user active?" return self.active
-
Ankush paul over 6 yearsas i said it is there already and it has a create_superuser function too, will you please check my edited code. now the code from models.py is up there
-
Ankush paul over 6 yearsi have solved it somehow, please revise your code post. Thanks for all the help and hope you will keep contributing more.. Thanks once again :)
-
emanuel sanga about 3 yearsThis is hardcoding. Not a good approach at all. But I wont downvote