Python-迁移Auth_user扩展表
迁移Auth表的流程
参考文档
https://stackoverflow.com/questions/42794212/migrating-from-django-user-model-to-a-custom-user-model
https://stackoverflow.com/questions/65562875/migration-admin-0001-initial-is-applied-before-its-dependency-app-0001-initial-o
问题描述
当我存在两个app的情况(day71_bbs,day85_drf), 并且day71_bbs的models中已经存在了auth用户扩展表,此时此刻我想在day85_drf APP中新建并使用auth用户扩展表,正常情况下,需要先进行数据库的回撤操作,否则会报如下错误:
ERRORS:
day71_bbs41.UserInfo.groups: (fields.E304) Reverse accessor for 'day71_bbs41.UserInfo.groups' clashes with reverse accessor for 'day85_drf.Userinfo111.groups'.
HINT: Add or change a related_name argument to the definition for 'day71_bbs41.UserInfo.groups' or 'day85_drf.Userinfo111.groups'.
day71_bbs41.UserInfo.user_permissions: (fields.E304) Reverse accessor for 'day71_bbs41.UserInfo.user_permissions' clashes with reverse accessor for 'day85_drf.Userinfo111.user_permissions'.
HINT: Add or change a related_name argument to the definition for 'day71_bbs41.UserInfo.user_permissions' or 'day85_drf.Userinfo111.user_permissions'.
day85_drf.Userinfo111.groups: (fields.E304) Reverse accessor for 'day85_drf.Userinfo111.groups' clashes with reverse accessor for 'day71_bbs41.UserInfo.groups'.
HINT: Add or change a related_name argument to the definition for 'day85_drf.Userinfo111.groups' or 'day71_bbs41.UserInfo.groups'.
day85_drf.Userinfo111.user_permissions: (fields.E304) Reverse accessor for 'day85_drf.Userinfo111.user_permissions' clashes with reverse accessor for 'day71_bbs41.UserInfo.user_permissions'.
HINT: Add or change a related_name argument to the definition for 'day85_drf.Userinfo111.user_permissions' or 'day71_bbs41.UserInfo.user_permissions'.
问题解决
1. 进行回撤操作
python3.9 manage.py migrate day71_bbs41 zero
"""
Operations to perform:
Unapply all migrations: day71_bbs41
Running migrations:
Rendering model states... DONE
Unapplying day71_bbs41.0004_alter_userinfo_phone... OK
Unapplying day71_bbs41.0003_auto_20210825_0607... OK
Unapplying day71_bbs41.0002_auto_20210803_0206... OK
Unapplying day71_bbs41.0001_initial... OK
"""
2. 更改AUTH_USER_MODEL
AUTH_USER_MODEL = 'day85_drf.Userinfo111'
3. 在day85_drf的models.py中扩展用户表
from django.contrib.auth.models import AbstractUser
class Userinfo111(AbstractUser):
phone=models.CharField(max_length=11)
4. 并执行迁移操作
python3.9 manage.py makemigrations day85_drf
python3.9 manage.py migrate day85_drf
问题2 表已经存在
出现下面这个问题,一般是由于误删除django_migrations表中的数据导致的。
django.db.utils.OperationalError: (1050, "Table 'django_content_type' already exists")
# 执行如下方法,会跳过所有表的创建,并向django_migrations表中添加数据
python3.9 manage.py migrate day85_drf --fake
当然如果发现有些表没有被创建出来,可以尝试通过
注释代码,python3.9 manage.py migrate day85_drf
取消注释,python3.9 manage.py migrate day85_drf
来恢复