运行Django项目services.py时遭遇Apps aren't loaded yet错误求助
解决Django中直接运行脚本出现AppRegistryNotReady的问题
嘿,这个坑我太熟了!你直接运行services.py的时候,Django的整个环境还没启动呢,它根本不知道你的应用和模型定义在哪儿,自然就会抛出这个“应用还没加载”的错误。给你两个靠谱的解决办法,按需选:
方法一:用Django自定义命令(官方推荐,长期维护首选)
这是最符合Django工作流的方式,以后维护起来也方便:
- 第一步:在你的Django应用目录下,新建
management/commands文件夹,记得给这两个文件夹都加上空的__init__.py文件,不然Django识别不到。 - 第二步:在
commands里新建一个脚本,比如叫populate_db.py,内容大概是这样:
from django.core.management.base import BaseCommand from your_app.models import Authority, Rating class Command(BaseCommand): help = '填充数据库的自定义命令' def handle(self, *args, **options): # 把你原来services.py里的填充数据库逻辑放到这里 # 比如: Authority.objects.create(name="示例机构") Rating.objects.create(score=5, authority=Authority.objects.first()) self.stdout.write(self.style.SUCCESS('数据库填充完成!'))
- 第三步:在项目根目录(有manage.py的那个目录)运行命令:
python manage.py populate_db,就可以正常执行填充逻辑啦。
方法二:手动初始化Django环境(适合临时脚本)
如果只是临时跑一下脚本,不想搞自定义命令,可以在你的services.py里先初始化Django环境,再导入模型:
if __name__ == '__main__': import os # 替换成你的项目settings模块路径,比如'my_project.settings' os.environ.setdefault('DJANGO_SETTINGS_MODULE', '你的项目名.settings') import django django.setup() # 现在再导入模型和执行填充逻辑 from your_app.models import Authority, Rating # 这里写你的填充代码
注意:一定要把模型导入和业务逻辑放到django.setup()之后,不然还是会报错。
小提醒
别把模型的导入写在脚本全局位置哦,那样不管你是不是直接运行脚本,导入的时候都会触发Django的模型加载,容易在其他地方引入奇怪的错误~
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

