Django迁移报错:无法找到User字段,外键关联User模型失败
解决Django外键引用User模型的错误问题
咱们来搞定你遇到的这个Django迁移错误,本质就是系统找不到你外键指向的User模型,一步步来解决:
错误原因拆解
你执行python ../manage.py makemigrations Myapp时弹出的两个错误,核心是同一个问题:
- Django会默认把你写的
'User'解析成当前应用(Myapp)下的模型,但你的Myapp里并没有定义这个User模型 - 或者你想引用的是Django自带的官方User,但引用路径写得不对
分场景给出解决方案:
场景1:使用Django官方自带的User模型
这是最常用的情况,直接修改外键的引用路径就行,推荐两种写法:
写法一(最灵活,优先推荐):用settings.AUTH_USER_MODEL引用
这种写法的好处是,以后如果换成自定义User模型,这里的代码完全不用改:
from django.conf import settings from django.db import models class Tld(models.Model): # 其他字段... FKtoClient = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.PROTECT)
写法二:直接引用auth应用下的User模型
如果确定不会更换自定义User,也可以直接写全路径:
from django.db import models class Tld(models.Model): # 其他字段... FKtoClient = models.ForeignKey('auth.User', on_delete=models.PROTECT)
场景2:使用你自己在Myapp里定义的自定义User模型
如果你打算用自己扩展的User模型,需要先完成两个关键步骤:
在Myapp/models.py里定义自定义User
继承AbstractUser来扩展(如果需要更底层的定制可以用AbstractBaseUser,但前者更简单):from django.contrib.auth.models import AbstractUser from django.db import models class User(AbstractUser): # 在这里添加你的自定义字段,比如: phone = models.CharField(max_length=11, blank=True, verbose_name="手机号")在settings.py里指定默认用户模型
告诉Django系统,要用你自定义的User作为默认用户模型:AUTH_USER_MODEL = 'Myapp.User'
完成这两步后,你的外键引用就可以正常使用'User'或者settings.AUTH_USER_MODEL了。
最后别忘了检查两个细节:
django.contrib.auth是否在你的INSTALLED_APPS里(默认新建的Django项目已经包含)- 如果是自定义User,确保Myapp已经加到
INSTALLED_APPS中
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

