【问题标题】:Migration fails when extending Django User Model扩展 Django 用户模型时迁移失败
【发布时间】:2017-04-23 06:10:02
【问题描述】:

我正在尝试通过继承 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 django django-models django-migrations django-users


    【解决方案1】:

    我能够通过以下简单步骤解决我的问题:

    1. 运行python manage.py makemigrations authentication - 因为使用AUTH_USER_MODEL 时,它将替换django.contrib.authauth_user 表的迁移,从而改变迁移过程。因此,如果我们无法为authentication 提供迁移文件,应用迁移无疑会失败。
    2. 运行python manage.py migrate

    宾果!

    【讨论】:

    • 我明白了:没有安装带有“身份验证”标签的应用
    • @ReeshabhRanjan 'authentication' 是他的应用程序的名称。您应该改用您的应用程序的名称。 python manage.py migrate your_app_name
    猜你喜欢
    • 1970-01-01
    • 2017-04-09
    • 1970-01-01
    • 1970-01-01
    • 2016-10-12
    • 2011-02-28
    • 2013-12-06
    • 2018-01-21
    相关资源
    最近更新 更多