AttributeError: объект 'NoneType' не имеет атрибута 'is_superuser'
Я работаю с Django, и я продолжаю получать эту ошибку при попытке создать нового суперпользователя в терминале:
AttributeError: объект 'NoneType' не имеет атрибута 'is_superuser'
Я перепробовал все, что искал, чтобы исправить это. Безуспешно.
Кроме того, этот код выделен серым цветом в моей пользовательской модели, и когда я навожу курсор на текст, он говорит: Code is unreachable Pylance
if not email:
raise ValueError('Users must have an email address')
email = self.normalize_email(email)
email = email.lower()
user = self.model(
email = email,
name = name
)
user.set_password(password)
user.save(using=self._db)
return user
Вот моя полная модель пользователя:
from abc import abstractmethod
from django.db import models
from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin, BaseUserManager
class UserAccountManager(BaseUserManager):
@abstractmethod
def create_user(self, email, name, password=None):
if not email:
raise ValueError('Users must have an email address')
email = self.normalize_email(email)
email = email.lower()
user = self.model(
email = email,
name = name
)
user.set_password(password)
user.save(using=self._db)
return user
def create_realtor(self, email, name, password=None):
user = self.create_user(email, name, password)
user.is_realtor = True
user.save(using=self._db)
return user
def create_superuser(self, email, name, password=None):
user = self.create_user(email, name, password)
user.is_superuser = True
user.is_staff = True
user.save(using=self._db)
return user
class UserAccount(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(max_length=255, unique=True)
name = models.CharField(max_length=255)
is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=False) # set to false for Auth
is_realtor = models.BooleanField(default=False)
objects = UserAccountManager()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['name']
def __str__(self):
return self.email
Вам необходимо создать общий метод create_user
, который может принимать extra_fields
:
def create_user(self, email, name, password=None, **extra_fields):
if not email:
raise ValueError('Users must have an email address')
email = self.normalize_email(email)
email = email.lower()
user = self.model(
email = email,
name = name,
**extra_fields
)
user.set_password(password)
user.save(using=self._db)
return user
Теперь, когда вы будете вызывать метод create_superuser
, вызовите свой метод create_user
следующим образом:
def create_superuser(self, email, name, password=None):
return self.create_user(email, name, password, is_superuser=True, is_staff=True)