TypeError: MyAccountManager.create_superuser() отсутствуют 3 обязательных позиционных аргумента: 'first_name', 'last_name' и 'username'.
Когда я запускаю следующую команду: 'python manage.py createsuperuser', она запрашивает только email и пароль. и как только я нажимаю enter, появляется ошибка, запрашивающая 3 других обязательных поля.
Как можно заполнить эти поля, если меня даже не просят их заполнять?
models.py :
from django.db import models
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager
# Create your models here.
class MyAccountManager(BaseUserManager):
def create_user(self,first_name,last_name,username,email,password=None):
if not email:
raise ValueError('User must have an email address')
if not username:
raise ValueError('User must have an username ')
user=self.model(
email=self.normalize_email(email),
username=username,
first_name=first_name,
last_name=last_name,
)
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self,first_name,last_name,email,username,password):
user = self.create_user(
email=self.normalize_email(email),
username=username,
password=password,
first_name=first_name,
last_name=last_name,
)
user.is_admin=True
user.is_active=True
user.is_staff=True
user.is_superadmin=True
user.save(using=self._db)
return user
class Account(AbstractBaseUser):
first_name=models.CharField(max_length=30)
last_name=models.CharField(max_length=30)
username=models.CharField(max_length=30, unique=True)
email=models.EmailField(max_length=100, unique=True)
phone_number=models.CharField(max_length=30)
#required
date_joined=models.DateTimeField(auto_now_add=True)
last_login=models.DateTimeField(auto_now_add=True)
is_admin=models.BooleanField(default=False)
is_staff=models.BooleanField(default=False)
is_active=models.BooleanField(default=False)
is_superadmin=models.BooleanField(default=False)
USERNAME_FIELD='email'
REQUIRED_FIELD=['username','first_name','last_name']
objects = MyAccountManager()
def _str_(self):
return self.email
def has_perm(self,perm,obj=None):
return self.is_admin
def has_module_perm(self,add_label):
return True
Я пробовал множество других решений, но ни одно из них не помогло, если кто-то из вас сталкивался с этой проблемой, не могли бы вы помочь мне разобраться с ней
Основной проблемой является атрибут REQUIRED_FIELDS
[Django-doc], он должен быть REQUIRED_FIELDS
(множественное число), а не .REQUIRED_FIELD
Но кроме этого, это не хорошая идея менять сигнатуры методов .create_user(…)
[Django-doc] и .create_superuser(…)
[Django-doc]. Просто оставьте их одинаковыми, чтобы другие плагины могли использовать эту логику:
class MyAccountManager(BaseUserManager):
def create_user(
self,
username,
email,
password=None,
first_name=None,
last_name=None,
**extra_fields
):
if not email:
raise ValueError('User must have an email address')
if not username:
raise ValueError('User must have an username ')
user = self.model(
email=self.normalize_email(email),
username=username,
first_name=first_name,
last_name=last_name,
**extra_fields
)
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(
self,
username,
email,
password=None,
first_name=None,
last_name=None,
**extra_fields
):
user = self.create_user(
email=self.normalize_email(email),
username=username,
password=password,
first_name=first_name,
last_name=last_name,
**extra_fields
)
user.is_admin = True
user.is_active = True
user.is_staff = True
user.is_superadmin = True
user.save(using=self._db)
return user