Django 3.0.3
У меня есть приложение account
, и я могу создать суперпользователя с помощью migrate.py createsuperuser
Вот содержимое models.py
:
class CustomUserManager(BaseUserManager):
use_in_migrations = True
def _create_user(self, email, password, **extra_fields):
email = self.normalize_email(email)
user = self.model(email=email, **extra_fields)
user.set_password(password)
user.save(using=self._db)
return user
...
def create_superuser(self, email=None, password=None, **extra_fields):
extra_fields.setdefault('is_staff', True)
extra_fields.setdefault('is_superuser', True)
if extra_fields.get('is_staff') is not True:
raise ValueError('Superuser must have is_staff=True.')
if extra_fields.get('is_superuser') is not True:
raise ValueError('Superuser must have is_superuser=True.')
return self._create_user(email, password, **extra_fields)
class Profile(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(
verbose_name='E-mail',
unique=True,
)
first_name = models.CharField(verbose_name='first name', max_length=30, blank=True)
last_name = models.CharField(verbose_name='last name', max_length=150, blank=True)
...
objects = CustomUserManager()
USERNAME_FIELD = 'email'
class Meta:
verbose_name = 'user'
verbose_name_plural = 'users'
...
И я пытаюсь установить миграцию данных. Сначала я запускаю manage.py makemigration
, затем создаю пустую миграцию, и вот она
def create_admin(apps, schema_editor):
Profile = apps.get_model('accounts', 'Profile')
Profile.objects.create_superuser(
email='admin@mail.ru',
password='123'
)
class Migration(migrations.Migration):
dependencies = [
('accounts', '0001_initial'),
]
operations = [
migrations.RunPython(create_admin),
]
Затем запускаю manage.py migrate
и получаю ошибку: AttributeError: 'Profile' object has no attribute 'set_password'
.
В settings.py у меня также есть AUTH_USER_MODEL = 'accounts.Profile'