You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 20:39:19