Без каких-либо предварительных миграций я добавил пользовательскую модель Пользователь в core приложение, чтобы включить пользовательскую аутентификацию, следуя записи в документации Django 2.0 / Настройка аутентификации в Django
Затем я сделал миграции:
$ python manage.py makemigrations
Migrations for 'core':
core/migrations/0001_initial.py
- Create model User
В 0001_initial.py
класс миграции начинается с:
class Migration(migrations.Migration):
initial = True
dependencies = [
('auth', '0009_alter_user_last_name_max_length'),
]
Я просмотрел официальную документацию Django 2.0 / Миграции , и этот файл, очевидно, является начальной миграцией, поскольку он имеет initial = True
. Но почему у него есть целая цепочка зависимостей, начинающаяся с 0009_alter_user_last_name_max_length
? Я сделал какую-то ошибку?
Когда выполняются миграции, это вывод:
$ python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, core, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0001_initial... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying core.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying sessions.0001_initial... OK
Когда пользовательский Пользователь модель не указана 0001_initial.py
начинается с:
class Migration(migrations.Migration):
initial = True
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
Кроме того, я не смог найти хорошее объяснение того, что именно делает migrations.swappable_dependency(settings.AUTH_USER_MODEL)
. Что он делает и почему его даже называют «swappable_dependency»? Было бы замечательно, если бы кто-то мог демистифицировать эту часть и для меня, или указать правильное направление для самостоятельного изучения. ?
Редактировать # 1
Исходный код пользовательской Пользовательской модели.
class UserManager(BaseUserManager):
def create_user(self, email, password=None):
if not email:
raise ValueError('Email not defined.')
user = self.model(email=self.normalize_email(email))
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self, email, password):
user = self.create_user(
email,
password=password,
)
user.is_staff = True
user.save(using=self._db)
return user
class User(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(unique=True)
created_at = models.DateTimeField(auto_now_add=True)
is_staff = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
EMAIL_FIELD = 'email'
USERNAME_FIELD = 'email'
objects = UserManager()
def __str__(self):
return self.email
def has_perm(self, perm, obj=None):
return True
def has_module_perms(self, app_label):
return True