Django执行makemigrations提示找不到product.models模块报错求助
问题修复方案
报错ModuleNotFoundError: No module named 'product.models'是Python模块导入路径识别失败导致的,和makemigrations本身逻辑无关,按以下步骤逐一排查即可解决:
- 检查models目录的初始化文件命名:确认
product应用下的models文件夹内存在__init__.py文件,文件名必须是前后各两个半角下划线,误写为单下划线_init_.py时,Python不会将该文件夹识别为可导入包,直接触发该报错。同时检查product应用根目录是否残留旧的models.py空文件,若有直接删除——Python导入模块时优先匹配同级.py文件,残留空文件会覆盖models文件夹的导入路径。 - 确认命令执行路径:必须在
manage.py文件所在的项目根目录执行python manage.py makemigrations命令,在子目录下执行时,Python导入搜索路径不包含app所在目录,无法识别对应模块。 - 替换硬导入为Django模型字符串引用(推荐,可同时避免循环导入问题):跨app关联模型不需要显式导入模型类,直接传入
app名.模型名的字符串作为字段关联参数即可,修改Order模型代码如下:
from django.contrib.auth.models import User from django.db import models class Order(models.Model): product = models.ManyToManyField('product.Product', blank=False) user = models.ForeignKey(User, on_delete=models.CASCADE)
修改后可以删除文件头部from product.models import Product的导入语句,Django会自动从已注册app中匹配对应模型。
- 校验app注册路径:如果
order、product两个应用存放在和settings.py同级的项目配置目录下,INSTALLED_APPS中不能直接写app名,要补全完整包路径,参考配置如下:
INSTALLED_APPS = [ ... 'django.contrib.staticfiles', 'bookstore.order', 'bookstore.product', ]
如果是这种目录结构,用上面提到的字符串引用模型的写法不需要额外调整导入路径。
内容的提问来源于stack exchange,提问作者Victor Torres
相关产品推荐
相关产品推荐

