Django 1.10出现User未知字段错误,跨环境运行异常求助
看起来你这问题挺闹心的——同一套代码在另一台机器跑完全正常,本地却报User模型找不到country、name、instituicao字段的错误,而且删库重装依赖都没用。结合你描述的场景(从正常机器导库后本地出问题,切回本地库也报错),大概率是本地环境的模型定义、配置或者迁移缓存出了问题,给你几个针对性的排查步骤:
1. 先确认自定义User模型的配置是否正确
首先回忆下你的项目是不是用了自定义User模型(毕竟Django默认User模型没有这几个字段)。去settings.py里找AUTH_USER_MODEL这个配置项,看看是不是准确指向了你的自定义模型(比如accounts.CustomUser)。
- 对比另一台机器的
settings.py,确保这个配置完全一致,别是本地改了配置自己忘了。 - 如果没配置
AUTH_USER_MODEL,那说明你可能直接修改了默认User模型?这可是Django的大忌,赶紧改回自定义模型的方式。
2. 清理Django的缓存和旧迁移文件
Django有时候会缓存旧的模型结构,哪怕你改了模型也可能没生效,试试这几步:
- 先清理Django缓存:
(Django 1.10本身没有python manage.py clearcacheclearcache命令的话,直接手动删除项目里所有__pycache__目录,还有*.pyc文件) - 然后删除每个app下
migrations文件夹里除了__init__.py之外的所有迁移文件,接着登录PostgreSQL删除django_migrations表:DROP TABLE django_migrations; - 最后重新生成迁移并应用:
python manage.py makemigrations python manage.py migrate
3. 核对本地模型定义与代码仓库的一致性
虽然用了GitHub版本控制,但难保本地有没有未提交的修改。去自定义User模型所在的models.py文件里,确认country、name、instituicao这几个字段确实存在,并且和仓库里的版本一致。
- 用git命令对比一下:
要是有本地修改,要么提交要么回滚到仓库版本。git diff your_app/models.py
4. 确认数据库连接没搞错
有时候会不小心连到其他环境的数据库,导致本地代码和数据库结构不匹配。检查settings.py里的DATABASES配置,确保指向的是本地的PostgreSQL数据库,而不是其他机器的库。
- 可以临时换个新的数据库名称测试:
然后用PostgreSQL命令创建新库:DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'temp_test_db', 'USER': 'your_db_user', 'PASSWORD': 'your_db_pwd', 'HOST': 'localhost', 'PORT': '', } }
再重新迁移,看看还会不会报错。createdb temp_test_db
5. 确保依赖版本完全一致
哪怕重装了pip依赖,也可能版本和另一台机器不一样。去正常机器上导出依赖列表:
pip freeze > requirements.txt
然后把这个文件拷到本地,在虚拟环境里安装完全相同的版本:
pip install -r requirements.txt
重点确认Django版本(你用的1.10)和psycopg2的版本,这俩最容易出问题。
如果以上步骤都试过还是不行,再检查下INSTALLED_APPS里有没有包含自定义User模型所在的app,而且app的顺序也别搞反了——有时候app加载顺序不对也会导致模型识别异常。
内容的提问来源于stack exchange,提问作者Marco Oliveira

