运行Django填充脚本报DJANGO_SETTINGS_MODULE配置错误该如何解决?
错误原因
你脚本里的导入顺序有误:导入Django模型from first_app.models import AccessRecord, Webpage, Topic的代码,放在了Django环境初始化操作的前面。Python执行脚本时会优先运行所有顶层导入语句,此时还没有完成Django配置的加载,访问模型时就会触发配置未初始化的报错。
解决方法
调整导入顺序,把Django模型的导入放到os.environ.setdefault和django.setup()之后即可,修正后的完整代码如下:
import os import django import random from faker import Faker # 先初始化Django环境 os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings') django.setup() # 环境初始化完成后再导入模型 from first_app.models import AccessRecord, Webpage, Topic # FAKE POP SCRIPT fakegen = Faker() topics = ['Search', 'Social', 'Market', 'News', 'Games'] def add_topic(): t = Topic.objects.get_or_create(top_name=random.choice(topics))[0] t.save() return t def populate(N=5): for entry in range(N): # get the topic for the entry top = add_topic() # create the fake data for that entry fake_url = fakegen.url() fake_date = fakegen.date() fake_name = fakegen.company() # create the new webpage entry webpg = Webpage.objects.get_or_create( topic=top, url=fake_url, name=fake_name)[0] # create a fake access record for that webpage acc_rec = AccessRecord.objects.get_or_create( name=webpg, date=fake_date)[0] if __name__ == '__main__': print('populating script..') populate(20) print('Populating complete')
其他异常排查
如果调整顺序后仍报错,可逐一核对以下配置:
- 脚本需要放在Django项目根目录,和
manage.py文件同级存放,否则无法正确加载项目配置 - 确认
os.environ.setdefault里的项目名和你实际创建的Django项目名一致,如果你创建项目时的名称不是mysite,需要替换为对应名称 - 运行脚本前确认已经激活Django项目对应的虚拟环境,且环境内已安装匹配版本的Django和Faker依赖
内容的提问来源于stack exchange,提问作者Tomás
相关产品推荐
相关产品推荐

