在脚本中单独使用django的ORM模型详解
有时候在测试django中一些模块时,不想重新跑一整个django项目,只想跑单个文件,正好写在if__name__=='__main__':这样也不会打扰到正常的代码逻辑
方法
正常方法
大家都知道的方法就是'pythonmanage.pyshell',当然我知道这可能不是你需要的;
更好用的方法
在脚本中import模型前调用下面几行即可:
importos,sys BASE_DIR=os.path.dirname(os.path.abspath(__file__))#定位到你的django根目录 sys.path.append(os.path.abspath(os.path.join(BASE_DIR,os.pardir))) os.environ.setdefault("DJANGO_SETTINGS_MODULE","dj_tasks.settings")#你的django的settings文件
接下来再调用'fromXXXX.modelsimportXXX'就不会报错了
补充知识:Django使用外部文件对models操作容易产生的问题
看代码吧!
frompv_server.modelsimportIVCurvesInfo,FaultType importos importdjango os.environ.setdefault('DJANGO_SETTINGS_MODULE','PV_Moniter.settings') django.setup() defadd_fault_type(fault_list,true_data_list,fault_decription_list=None): foriteminfault_list: idx=fault_list.index(item) true_data=true_data_list[idx] fault_decription=fault_decription_list[idx]if(fault_decription_listandfault_decription_list[idx])\ elseNone FaultType.addFault.create_faultType(item,true_data,fault_decription) if__name__=='__main__': add_fault_type(['normal','partialshadow_1','partialshadow_2', 'partialshadow_3','shortcircuit_1','shortcircuit_2', 'degradation_1','degradation_2','open_circuit'], [0]*9) print("Done!")
以上述代码为例
会产生
django.core.exceptions.ImproperlyConfigured:RequestedsettingINSTALLED_APPS,butsettingsarenotconfigured.YoumusteitherdefinetheenvironmentvariableDJANGO_SETTINGS_MODULEorcallsettings.configure()beforeaccessingsettings.
的问题,这里要注意明明已经增加了
os.environ.setdefault('DJANGO_SETTINGS_MODULE','PV_Moniter.settings')
django.setup()
但,还是报错的原因是因为!!!!在导入models的时候,还没有在django对应的环境下导入
这里导入的顺序很重要
importos importdjango os.environ.setdefault('DJANGO_SETTINGS_MODULE','PV_Moniter.settings') django.setup() frompv_server.modelsimportIVCurvesInfo,FaultType
这样更换导入顺序后,就顺利的解决啦!
以上这篇在脚本中单独使用django的ORM模型详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。