TypeError: create_superuser() missing 1 required positional argument: 'profile_picture'
TypeError: create_superuser() missing 1 required positional argument: 'profile_picture'
添加 profile_picture
字段后出现以下错误:
TypeError: create_superuser() missing 1 required positional argument: 'profile_picture'
此 profile_picture 字段是 "ImageField" 设置为 "Null = True"。
我尝试了以下方法:def create_user(...., profile_picture=None, ....)
。没用。
和错误仅在我从那里创建超级用户时出现在命令提示符下。
这是我的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
那么,您还需要创建 create_superuser
函数:
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
祝你好运!
我也遇到了同样的问题,原来是在列表中命名为REQUIRED_FIELDS的名字有误。
该列表告诉 django 框架在创建过程中也要求提供名称。因为它不是在问,而你已经让它变得必要了。
希望对你有帮助,祝你好运
最好在 0001.initial.py 迁移文件中创建 class。定义一个 class,其中包含登录所需的所有字段,并提供依赖项和操作块 empty.That's it
在 migrations 文件夹中创建一个 0001_initial.py 文件,然后按照下面的代码进行操作...
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='mail@gmail.com',
is_staff=True,
is_superuser=True,
phone='987654321',
gender='Male'
)
user.set_password('anypassword')
user.save()
dependencies=[
]
operations=[
migrations.RunPython(seed_data),
]
您可以将 username
添加到 REQUIRED_FIELDS。之后 python manage.py createsuperuser
请求用户名字段并工作。
REQUIRED_FIELDS = ['full_name', 'gender', 'username]
您需要将 "profile_picture" 添加到 "REQUIRED_FIELDS" in class“User(AbstractBaseUser)” 在 “models.py”:
# "models.py"
class User(AbstractBaseUser):
# ... # Here
REQUIRED_FIELDS = ['full_name', 'profile_picture', 'gender']
# ...
添加 profile_picture
字段后出现以下错误:
TypeError: create_superuser() missing 1 required positional argument: 'profile_picture'
此 profile_picture 字段是 "ImageField" 设置为 "Null = True"。
我尝试了以下方法:def create_user(...., profile_picture=None, ....)
。没用。
和错误仅在我从那里创建超级用户时出现在命令提示符下。
这是我的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
那么,您还需要创建 create_superuser
函数:
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
祝你好运!
我也遇到了同样的问题,原来是在列表中命名为REQUIRED_FIELDS的名字有误。 该列表告诉 django 框架在创建过程中也要求提供名称。因为它不是在问,而你已经让它变得必要了。 希望对你有帮助,祝你好运
最好在 0001.initial.py 迁移文件中创建 class。定义一个 class,其中包含登录所需的所有字段,并提供依赖项和操作块 empty.That's it
在 migrations 文件夹中创建一个 0001_initial.py 文件,然后按照下面的代码进行操作...
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='mail@gmail.com',
is_staff=True,
is_superuser=True,
phone='987654321',
gender='Male'
)
user.set_password('anypassword')
user.save()
dependencies=[
]
operations=[
migrations.RunPython(seed_data),
]
您可以将 username
添加到 REQUIRED_FIELDS。之后 python manage.py createsuperuser
请求用户名字段并工作。
REQUIRED_FIELDS = ['full_name', 'gender', 'username]
您需要将 "profile_picture" 添加到 "REQUIRED_FIELDS" in class“User(AbstractBaseUser)” 在 “models.py”:
# "models.py"
class User(AbstractBaseUser):
# ... # Here
REQUIRED_FIELDS = ['full_name', 'profile_picture', 'gender']
# ...