Не удается выполнить миграцию для моей пользовательской модели пользователя
Привет, ребята, у меня такая проблема с моими миграциями django, когда я пытаюсь создать пользовательскую модель пользователя для моего сайта
Итак, что происходит, когда я запускаю миграцию, она выдает ошибку, говорящую:-
ValueError: Поле admin.LogEntry.user было объявлено с ленивой ссылкой на 'user.newuser', но приложение 'user' не предоставляет модель 'newuser'. Поле user.UserInfo.user было объявлено с ленивой ссылкой на 'user.newuser', но приложение 'user' не предоставляет модель 'newuser'.
Я изо всех сил пытался отладить его, но ничего не получается, я также следовал ответу на stack overflow, но это тоже не помогло Я реализовал все, что нужно, так что да, остальное - остальное, и вот мой код вместе с файлом миграций
модели:-
class CustomAccountManager(BaseUserManager):
def create_user(self, first_name, last_name, phone_number, email, password,
**other_fields):
if not email:
raise ValueError(_('You must provie an email address'))
if not first_name:
raise ValueError(_('You must provide a first name'))
if not last_name:
raise ValueError(_('You must provide a last name'))
email = self.normalize_email(email)
user = self.model(email=email, first_name=first_name, last_name=last_name,
phone_number=phone_number, **other_fields)
user.set_password(password)
return user
def create_superuser(self, email, first_name, last_name, phone_number, password,
**other_fields):
other_fields.setdefault('is_staff', True)
other_fields.setdefault('is_superuser', True)
other_fields.setdefault('is_active', True)
if other_fields.get('is_staff') is not True:
raise ValueError(_('Superuser must be assigned to is_staff=True'))
if other_fields.get('is_active') is not True:
raise ValueError(_('Superuser must be assigned to is_active=True'))
if other_fields.get('is_superuser') is not True:
raise ValueError(_('Superuser must be assigned to is_superuser=True'))
self.create_user(email, first_name, last_name, password, phone_number,
**other_fields)
class NewUser(AbstractBaseUser, PermissionsMixin):
first_name = models.CharField(max_length=200, null=True, blank=True)
last_name = models.CharField(max_length=200, null=True, blank=True)
email = models.EmailField(max_length=200, null=True, blank=True, unique=True)
password = models.CharField(max_length=200,null=True, blank=True)
confirm_password = models.CharField(max_length=200, null=True, blank=True)
phone_number = models.CharField(max_length=10,null=True, blank=True)
address = models.TextField(null=True, blank=True)
pin_code = models.CharField(null=True, max_length=6, blank=True)
region = models.CharField(null=True, max_length=200, blank=True)
state = models.CharField(null=True, max_length=100, blank=True)
start_date = models.DateField(default=timezone.now)
is_staff = models.BooleanField(default=False)
is_active = models.BooleanField(default=False)
objects = CustomAccountManager()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['first_name', 'last_name', 'phone_number']
def __str__(self):
return self.first_name + ' ' + self.last_name
Миграции:-
class Migration(migrations.Migration):
dependencies = [
('auth', '0012_alter_user_first_name_max_length'),
('user', '0015_delete_newuser'),
]
operations = [
migrations.CreateModel(
name='NewUser',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')),
('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')),
('first_name', models.CharField(blank=True, max_length=200, null=True)),
('last_name', models.CharField(blank=True, max_length=200, null=True)),
('email', models.EmailField(blank=True, max_length=200, null=True, unique=True)),
('password', models.CharField(blank=True, max_length=200, null=True)),
('confirm_password', models.CharField(blank=True, max_length=200, null=True)),
('phone_number', models.CharField(blank=True, max_length=10, null=True)),
('address', models.TextField(blank=True, null=True)),
('pin_code', models.CharField(blank=True, max_length=6, null=True)),
('region', models.CharField(blank=True, max_length=200, null=True)),
('state', models.CharField(blank=True, max_length=100, null=True)),
('start_date', models.DateField(default=django.utils.timezone.now)),
('is_staff', models.BooleanField(default=False)),
('is_active', models.BooleanField(default=False)),
('groups', models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.group', verbose_name='groups')),
('user_permissions', models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.permission', verbose_name='user permissions')),
],
options={
'abstract': False,
},
),
]
настройки:-
apps-
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'home.apps.HomeConfig',
'pages.apps.PagesConfig',
'user.apps.UserConfig',
'reservation.apps.ReservationConfig',
]
вызов новой модели пользователя-
AUTH_USER_MODEL = 'user.NewUser'
Изменение пользовательской модели в середине проекта представляет собой сложную ситуацию, если вы пытаетесь переопределить существующую пользовательскую модель с помощью NewUser
. Для этого вам придется написать пользовательскую миграцию, чтобы перенести все данные из текущей таблицы User
в таблицу NewUser
, а затем безопасно сбросить таблицу User
.
Если это не так, и вы только что начали проект, не стесняйтесь отказаться от текущей базы данных и make migrations
снова после изменения модели пользователя по умолчанию в settings.py
(вы уже это делаете). Также убедитесь, что все импорты в других файлах не датированы, чтобы использовать вашу модель NewUser
вместо модели по умолчанию django User
.