Django控制台调用User模型报NameError,修改导入方式仍无效
问题原因与解决方法
核心原因
你在Django Shell中直接调用User,但当前Shell环境未导入User类——模型文件里的User导入仅用于模型定义,不会自动同步到Shell全局环境,这和你修改模型里的导入方式无关。
解决步骤
方法1:在Shell中直接导入User
根据你模型的导入方式,对应两种Shell命令:
- 若使用
get_user_model()(Django推荐写法):from django.contrib.auth import get_user_model User = get_user_model() user = User.objects.get(username='admin') - 若直接导入User类:
from django.contrib.auth.models import User user = User.objects.get(username='admin')
方法2:从自定义模型模块导入User
你已在blog.models中定义了User变量,可直接从该模块导入:
from blog.models import User user = User.objects.get(username='admin')
额外说明
模型中推荐使用get_user_model()而非直接导入User类,这是Django最佳实践——若后续项目自定义用户模型,get_user_model()会自动适配,无需修改现有代码。你之前替换导入方式未解决问题,本质是混淆了模型文件的局部环境与Shell的全局环境,Shell中必须单独导入所需类。
内容的提问来源于stack exchange,提问作者Усман Аккаев
相关产品推荐
相关产品推荐

