Django自定义AuthUser模型迁移报错:admin.LogEntry.user引用异常
解决Django自定义用户模型迁移时的LogEntry引用错误
我之前在新项目里自定义用户模型时也踩过这个一模一样的坑,这个错误的核心原因是:Django自带的admin应用中的LogEntry模型默认会关联系统原生的User模型,当你中途配置自定义用户模型后,已生成的迁移文件(尤其是admin的迁移)会残留对旧User模型的引用,导致和新的自定义模型冲突。
针对你的新项目场景,这里有一套亲测有效的解决步骤:
1. 清理现有迁移文件与数据库(新项目无数据风险)
因为是新项目,没有需要保留的数据,直接清理掉旧的迁移记录和数据库即可:
- 找到
recommend应用下的migrations文件夹,删除里面除了__init__.py之外的所有.py和.pyc文件 - 如果使用SQLite数据库,直接删除项目根目录下的
db.sqlite3文件;如果是MySQL/PostgreSQL等,直接清空对应数据库或创建一个全新的数据库
2. 确认自定义用户模型配置无误
检查你的models.py和settings.py,确保没有拼写错误:
models.py中的模型定义要正确继承AbstractUser:from django.contrib.auth.models import AbstractUser from django.db import models class AuthUser(AbstractUser): # 在这里添加你的自定义字段,比如: # phone = models.CharField(max_length=11, unique=True, null=True) passsettings.py中的AUTH_USER_MODEL配置必须准确,注意应用名和模型名的大小写(模型名是你定义的类名AuthUser):AUTH_USER_MODEL = 'recommend.AuthUser'
3. 重新生成并执行迁移
在终端中依次执行以下命令:
python manage.py makemigrations python manage.py migrate
这样就能正常完成数据库迁移了。另外提醒一句:自定义用户模型一定要在项目第一次执行migrate之前就配置好,否则后续很容易出现这类关联冲突,处理起来会更麻烦。
内容的提问来源于stack exchange,提问作者Hodaka Kubo
相关产品推荐
相关产品推荐

