栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

django解决自定义用户验证模型类时报错--django.db.migrations.exceptions.InconsistentMigrationHistory

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

django解决自定义用户验证模型类时报错--django.db.migrations.exceptions.InconsistentMigrationHistory

使用场景:

Django自定义用户模型类

有些项目可能会有认证需求,而 Django 内置的 User 模型并不总是合适。如Django自带的模型类中不包括我们需要的字段,这时我们就需要自定义User模型类:
我这里自定义的User模型类


问题描述

迁移模型类到数据库时出错

在迁移模型类的时候报InconsistentMigrationHistory错误:


原因分析:

报错代码大概的意思就是说admin.0001_initial这个迁移文件,应该在users.0001_initial这个迁移文件之后被应用:

迁移顺序:
我们在对生成的迁移文件进行迁移的时候,Django 不是通过迁移的名字决定迁移执行顺序,而是通过在迁移类上使用两个属性: dependencies 和 run_before。

我刚生成的users.0001_initial这个迁移文件就是依赖于auth子应用下的0012_alter_user_first_name_max_length这个迁移文件,也就是说当前我的迁移文件要在0012_alter_user_first_name_max_length这个迁移文件被应用之后应用,才是一个正确的迁移顺序

查看迁移迁移表:

从数据库中的迁移记录可以看出我在创建Django项目之后就对Django默认的User用户模型迁移文件进行了迁移操作,并且也迁移了其他的模型类,也能看出admin子应用下的0001_initial这个迁移文件是在auth子应用下的0001_initial迁移文件之后应用,而现在我在创建的users子应用下自定义了User用户模型类,并也在配置文件中指定了默认的验证User模型类为我自己定义的模型类


而我准备迁移当前我自己定义的User模型类时,admin下的0001.initial都已经被应用,所以现在再迁移当前我自定义的User模型类就出现了迁移顺序混乱的问题


解决方案:

场景一:

在你新建Django项目时,从未进行迁移操作前,就自定义用户模型类,这也是官方文档推荐的。

场景二:如上

解决方法一(删除所有的表,迁移文件):

1.删除数据库中所有的表
2.删除所有自己创建的应用下的migrations下的迁移文件
3.重新进行迁移操作

解决方法二(不用删表,迁移文件):

1.将自定义的User模型类tb_table字段改为auth_user

from django.contrib.auth.models import AbstractUser
from django.db import models
class User(AbstractUser):
    class Meta:
        db_table = 'auth_user'#这里更改

2.配置文件指定,生成迁移文件

AUTH_USER_MODEL = 'users.User'

3.通过手动更改将User的初始迁移文件添加到迁移历史记录中(20行我自己添加的):

4.更新django_content_types表中app_label=auth,model=user的那条记录,将app_label更改为user


5.进行migrate迁移数据表操作(没有报错)

6.在自定义的User模型上添加字段,

from django.contrib.auth.models import AbstractUser
from django.db import models


class User(AbstractUser):
    mobile = models.CharField(max_length=11, unique=True, verbose_name='手机号码', null=True, blank=True)#新建字段
    class Meta:
        db_table = 'auth_user'
       

7.生成迁移文件,进行迁移操作

8.查看表(相比之前多了mobile字段)

9.更改表名


到此結束,感謝閲讀~~~~~~~~~~~~~
小白自学,各路神仙勿喷

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1029170.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号