Django报ModuleNotFoundError:No module named 'models'如何解决
报错根因
ModuleNotFoundError: No module named 'models' 是admin.py中的导入路径写法错误,和模型命名、文件夹命名冲突无关。
Django app内的模块导入不能直接写from models import xxx,这种写法会让Python在项目根路径全局搜索models模块,而你的models.py是存放在对应app的目录下,自然无法被匹配到。
修复方法
- 修改admin.py内的模型导入语句,两种合法写法任选其一即可:
- 同目录相对导入(推荐,无需硬编码app名称)
from django.contrib import admin from .models import Job admin.site.register(Job)- 绝对路径导入,将代码中
your_app_name替换为你存放models.py、admin.py的那个应用文件夹的实际名称
from django.contrib import admin from your_app_name.models import Job admin.site.register(Job) - 修复导入后注意排查models.py的潜在报错:当前Job模型中引用的
TYPE_CHOICES、EXP_CHOICES、FULL_TIME、TIER1四个常量未在代码中定义,后续执行数据库迁移时会触发NameError,需要在Job类定义前补充这部分常量配置,参考示例:
# 补充在Job类定义之前 TYPE_CHOICES = [ ("full_time", "全职"), ("part_time", "兼职"), ("intern", "实习") ] FULL_TIME = "full_time" EXP_CHOICES = [ ("fresh", "应届生"), ("junior", "1-3年经验"), ("mid", "3-5年经验") ] TIER1 = "fresh"
- 确认对应应用已经添加到项目settings.py的
INSTALLED_APPS配置列表中,修改完成后依次执行python manage.py makemigrations、python manage.py migrate完成模型同步即可。
内容的提问来源于stack exchange,提问作者Muhumuza
相关产品推荐
相关产品推荐

