Django执行makemigrations报错:ModuleNotFoundError: No module named 'livros'
解决Django makemigrations报错ModuleNotFoundError: No module named 'livros'
问题分析
从你提供的代码和报错信息来看,核心问题有两个:
1. 配置文件语法错误
INSTALLED_APPS列表未正确闭合,且你把模型代码直接写在了配置代码中间,导致Python无法正常解析模块结构,进而触发找不到livros模块的错误。
2. 应用结构可能不规范
如果livros是你自定义的Django应用,需确保它的目录结构符合Django要求,且已正确创建。
修复步骤
步骤1:修正配置文件语法
在项目的settings.py中,INSTALLED_APPS必须是完整闭合的列表,模型代码要放在livros应用的models.py文件中,不能和配置代码混写。
正确的INSTALLED_APPS配置:
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'livros', # 注意结尾逗号和列表闭合 ]
步骤2:确保livros应用结构合规
- 若还未创建
livros应用,先通过命令生成:
python manage.py startapp livros
执行后会生成标准的应用目录:
livros/ __init__.py admin.py apps.py migrations/ __init__.py models.py tests.py views.py
- 将你的模型代码移到
livros/models.py中,同时修正缩进(Python对缩进要求严格):
from django.db import models class Livros(models.Model): nome = models.CharField(max_length=100) autor = models.CharField(max_length=30) co_autor = models.CharField(max_length=30) data_cadastro = models.DateField() emprestado = models.BooleanField(default=False) nome_emprestado = models.CharField(max_length=30) data_emprestimo = models.DateTimeField() data_devolução = models.DateTimeField() tempo_duração = models.DateField()
步骤3:重新执行迁移命令
回到项目根目录(包含manage.py的目录),运行:
python manage.py makemigrations python manage.py migrate
额外提示
- 若
livros/apps.py中定义了LivrosConfig,也可以用完整路径注册应用:'livros.apps.LivrosConfig',这是更规范的写法。
内容的提问来源于stack exchange,提问作者Gabriel Mota
相关产品推荐
相关产品推荐

