扩展 Django 用户模型时迁移失败
Migration fails when extending Django User Model
我正在尝试通过继承 AbstractBaseUser 来扩展 django User 模型,这样我就可以操纵项目的身份验证过程。
这是我的模型的样子。
class AccountManager(BaseUserManager):
... create_user
... create_superuser
class Account(AbstractBaseUser):
email = models.EmailField(unique=True)
username = models.CharField(max_length=40, unique=True)
objects = AccountManager()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['username']
这是我的设置INSTALLED_APPS
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'debug_toolbar',
'rest_framework',
'compressor',
'authentication'
]
AUTH_USER_MODEL = 'authentication.Account'
这里的问题我注意到 django 正在绕过 auth.0001_initial
的迁移过程,它直接跳转创建 admin.0001_initial
使我的迁移失败
django.db.utils.IntegrityError: (1215, u'Cannot add foreign key constraint')
我该如何解决这个问题,请帮忙?
我能够通过以下简单步骤解决我的问题:
- 运行
python manage.py makemigrations authentication
- 因为当使用 AUTH_USER_MODEL
时它将替换 auth_user
table 的迁移 django.contrib.auth
改变迁移过程.因此,如果我们未能为 authentication
提供迁移文件,应用程序迁移无疑会失败。
- 运行
python manage.py migrate
.
宾果!
我正在尝试通过继承 AbstractBaseUser 来扩展 django User 模型,这样我就可以操纵项目的身份验证过程。
这是我的模型的样子。
class AccountManager(BaseUserManager):
... create_user
... create_superuser
class Account(AbstractBaseUser):
email = models.EmailField(unique=True)
username = models.CharField(max_length=40, unique=True)
objects = AccountManager()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['username']
这是我的设置INSTALLED_APPS
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'debug_toolbar',
'rest_framework',
'compressor',
'authentication'
]
AUTH_USER_MODEL = 'authentication.Account'
这里的问题我注意到 django 正在绕过 auth.0001_initial
的迁移过程,它直接跳转创建 admin.0001_initial
使我的迁移失败
django.db.utils.IntegrityError: (1215, u'Cannot add foreign key constraint')
我该如何解决这个问题,请帮忙?
我能够通过以下简单步骤解决我的问题:
- 运行
python manage.py makemigrations authentication
- 因为当使用AUTH_USER_MODEL
时它将替换auth_user
table 的迁移django.contrib.auth
改变迁移过程.因此,如果我们未能为authentication
提供迁移文件,应用程序迁移无疑会失败。 - 运行
python manage.py migrate
.
宾果!