从django用户模型迁移到自定义用户模型

问题描述 投票:8回答:4

我遵循这两个引用(onetwo)来拥有自定义用户模型,以便通过电子邮件进行身份验证,并为其添加额外的字段。

class User(AbstractBaseUser, PermissionsMixin):
    email = models.EmailField(
        unique=True,
        max_length=254,
    )
    mobile_number = models.IntegerField(unique=True)
    is_active = models.BooleanField(default=True)
    is_admin = models.BooleanField(default=False)

    objects = UserManager()
    ...
    ...    
    class Meta:
        db_table = 'auth_user'
    ...
    ...

如您所见,我已将db_table='auth_user'添加到类的Meta字段中。此外,我已将AUTH_USER_MODEL = 'accounts.User'和用户模型应用程序(即帐户)包含在settings.py中的INSTALLED_APPS中。此外,我从应用程序中删除了迁移文件夹。

然后尝试迁移:

$ python manage.py makemigrations accounts
Migrations for 'accounts':
  accounts/migrations/0001_initial.py:
    - Create model User

$ python manage.py migrate accounts

这给了我一个错误:

django.db.migrations.exceptions.InconsistentMigrationHistory:迁移admin.0001_initial在数据库'default'上的依赖account.0001_initial之前应用。

如何从现有的django用户模型迁移到自定义用户模型?

django django-migrations
4个回答
7
投票

您必须从迁移历史记录中清除admin,auth,contenttypes和sessions,并删除表。首先,删除应用程序的迁移文件夹,然后键入以下内容:

python manage.py migrate admin zero
python manage.py migrate auth zero
python manage.py migrate contenttypes zero
python manage.py migrate sessions zero

之后,你可以运行makemigrations accountsmigrate accounts


4
投票

从数据库中删除现有的所有表。[注意:数据将丢失]

从所有应用程序中删除pycache和迁移。

为您的相关应用运行迁移

python manage.py makemigrations users

将表迁移到数据库

python manage.py migrate

3
投票

在我的特定情况下,其他答案没有帮助(即使在我尝试使用migrate ... zero删除表格之后,甚至在我删除了迁移文件夹之后,错误仍然存​​在),以下情况有所帮助,但我在一开始就因此只删除第一次迁移时创建的db.sqlite3文件没问题。 (根据您的settings.py,您可能拥有不同的数据库文件)。

如果您确定不丢失数据库文件中的重要数据(例如,您还没有将大量信息存储在数据库中并且不难重新开始),那么您真的只能这样做,并且您将需要再次迁移一切。


2
投票

你需要运行:

python manage.py makemigrations accounts

在执行最初的manage.py migrate之前(最初我的意思是你第一次在你的项目上运行migrate

建议在项目开始时设置自定义用户模型,这样就可以在创建admin,auth,contenttypes,sessions表的同时迁移“accounts”应用程序。

但如果您已经创建了表格,那么您应该按照@ krishna-chandak描述的说明进行操作:https://stackoverflow.com/a/53599345/5950111

你可以阅读文档:https://docs.djangoproject.com/en/2.0/topics/auth/customizing/#using-a-custom-user-model-when-starting-a-project


1
投票

我知道这是一个相当古老的问题,但对于今天像我这样搜索这个主题的人来说,这里是一个解决方案,不会删除迁移,删除表格和其他讨厌的东西)

https://www.caktusgroup.com/blog/2019/04/26/how-switch-custom-django-user-model-mid-project/

© www.soinside.com 2019 - 2024. All rights reserved.