При миграции: AttributeError: объект «Профиль» не имеет атрибута «set_password», используя пользовательский UserManager - PullRequest
0 голосов
/ 21 марта 2020

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'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...