在腳本中單獨使用django的ORM模型詳解
有時候在測試django中一些模塊時,不想重新跑一整個django項目,只想跑單個文件,正好寫在if __name__ == ’__main__’: 這樣也不會打擾到正常的代碼邏輯
方法
正常方法
大家都知道的方法就是’python manage.py shell’,當然我知道這可能不是你需要的;
更好用的方法
在腳本中import模型前調用下面幾行即可:
import os, sysBASE_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文件
接下來再調用’from XXXX.models import XXX’就不會報錯了
補充知識:Django使用外部文件對models操作容易產生的問題
看代碼吧!
from pv_server.models import IVCurvesInfo, FaultTypeimport osimport django os.environ.setdefault(’DJANGO_SETTINGS_MODULE’, ’PV_Moniter.settings’)django.setup() def add_fault_type(fault_list, true_data_list, fault_decription_list=None): for item in fault_list: idx = fault_list.index(item) true_data = true_data_list[idx] fault_decription = fault_decription_list[idx] if (fault_decription_list and fault_decription_list[idx]) else None FaultType.addFault.create_faultType(item, true_data,fault_decription) if __name__ == ’__main__’: add_fault_type([’normal’, ’partial shadow_1’, ’partial shadow_2’, ’partial shadow_3’, ’short circuit_1’, ’short circuit_2’, ’degradation_1’, ’degradation_2’, ’open_circuit’], [0] * 9) print('Done!')
以上述代碼為例
會產生
django.core.exceptions.ImproperlyConfigured: Requested setting INSTALLED_APPS, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.
的問題,這里要注意 明明已經增加了
os.environ.setdefault(’DJANGO_SETTINGS_MODULE’, ’PV_Moniter.settings’)django.setup()
但,還是報錯的原因是因為!?。?!在導入models的時候,還沒有在django對應的環境下導入
這里導入的順序很重要
import osimport django os.environ.setdefault(’DJANGO_SETTINGS_MODULE’, ’PV_Moniter.settings’)django.setup() from pv_server.models import IVCurvesInfo, FaultType
這樣更換導入順序后,就順利的解決啦!
以上這篇在腳本中單獨使用django的ORM模型詳解就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。
相關文章: