2015-09-15 43 views
4

我有一個典型的Django網絡應用程序。我想用自己的virtualenv創建一個單獨的項目,並使用ORM在數據庫中創建新條目。獨立的Django ORM - 默認設置不被識別

解釋如何做到這一點有很多資源,包括this entry from the docs。所以我寫了一個腳本如下:

# Add Django project directory to path, so that I can 
# import the models 
import sys 
sys.path.append("/path/to/django/project") 

# Import my settings file from the Django project 
from django_proj import settings as django_settings 

import django 
from django.conf import settings 
if not settings.configured: 
    settings.configure(django_settings) 
django.setup() 

當我嘗試運行它這樣,我得到以下錯誤:

AttributeError: 'module' object has no attribute 'LOGGING_CONFIG' 

我相信這是由於這樣的事實,我不在我的設置中明確指定LOGGING_CONFIG。我依靠默認值。

當我通過python manage.py運行它時,我的配置很明顯。這個額外的設置導致問題的問題是什麼?

謝謝!

回答

5

嘗試:

import os 
import sys 
import django 
sys.path.append('/path/to/django_project') 
#from django_project import * 
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'django_project.settings') 
django.setup() 

這爲我工作。希望它可以幫助

+0

我不認爲在這裏需要'from django_project import *'。 – Alasdair

+0

這是可能的。沒有嘗試過它,因爲它只是一個很久以前的舊片段,當時我也想將django ORM作爲獨立使用。 – BigZ

3

當你說

settings.configure(django_settings) 

它是一樣的

settings.configure(default_settings=django_settings) 

所以你告訴Django的使用django_settings爲默認值,而不是django.conf.global_settingsDjango docs say,你通常不應該這樣做,並在你的情況下,它會導致錯誤,因爲你沒有設置LOGGING的默認值。

配置腳本以使用Django默認設置的最簡單方法是設置環境變量,如@ BigZ的答案。

+0

啊,明白了!謝謝,我認爲傳遞參數和設置環境變量是一樣的。在這些情況下,我更喜歡直接傳遞參數而不是通過環境變量。但截至目前,似乎唯一的方法就是通過ENV變量,對吧?這是因爲這是更好的形式嗎? – user1496984

+1

可以指定個人設置,例如'settings.configure(DEBUG = TRUE,TEMPLATES = [...])',但我不認爲可以導入設置文件或指定其路徑而不是設置環境變量。我不知道爲什麼會這樣。 – Alasdair