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
来恢复