2011-04-23 97 views
3

當試圖在我的本地機器上使用loaddata(WIN /源碼):Django的loaddata設置錯誤

python django-admin.py loaddata dumpdata.json 

我收到以下錯誤:

raise ImportError("Settings cannot be imported, because environment variable %s is undefined." % ENVIRONMENT_VARIABLE) ImportError: Settings cannot be imported, because environment variable DJANGO_SETTINGS_MODULE is undefined. 

我使用djangoconfig的應用程序是否有幫助:

""" 
Django-config settings loader. 
""" 

import os 

CONFIG_IDENTIFIER = os.getenv("CONFIG_IDENTIFIER") 
if CONFIG_IDENTIFIER is None: 
    CONFIG_IDENTIFIER = 'local' 

# Import defaults 
from config.base import * 

# Import overrides 
overrides = __import__(
    "config." + CONFIG_IDENTIFIER, 
    globals(), 
    locals(), 
    ["config"] 
) 

for attribute in dir(overrides): 
    if attribute.isupper(): 
     globals()[attribute] = getattr(overrides, attribute) 

項目>蟒manage.py loaddata dumpdata.json --settings = config.b ASE

WARNING: Forced to run environment with LOCAL configuration. 

Problem installing fixture 'dumpdata.json': Traceback 
(most recent call last): 
    File "loaddata.py", line 174, in handle 
    obj.save(using=using) 

... 


    File "C:\Python26\lib\site-packages\django\db\backends\sqlite3\base.py", line 
234, in execute 
    return Database.Cursor.execute(self, query, params) 
IntegrityError: columns app_label, model are not unique 
+0

的'IntegrityError '看起來像來自內容類型表,即contrib包之一。我敢打賭,你試圖加載到的數據庫已經有一些內容,可能來自之前的失敗負載。由於它看起來像使用SQLite,因此如果需要創建新數據庫,則刪除數據庫文件syncdb,然後重試加載。 – 2011-04-23 22:54:28

+1

同意@Mike DeSimone除了'syncdb'會初始化content_types和數據,所以你可能會得到同樣的錯誤(按照他的建議去看!)。您可能需要編輯dumpdata.json以取出content_types的數據。 – JCotton 2011-04-23 23:40:24

+0

刪除了sqlite數據庫。是否syncdb。嘗試loaddata =相同的錯誤。 – Eeyore 2011-04-24 01:01:16

回答

1

有提供您設置的Django兩個標準的方式。

  • 使用設置(或在Unix出口)​​
  • 或者作爲一個選項與django-admin.py --settings=mysite.settings

Django-config做不同的事情,因爲它可以讓你有多個設置文件。 Django-config使用manage.py來指定使用哪個。儘可能使用manage.py;它建立了環境。在你的情況下,試試這個- 設置指向你想要在django-config的config文件夾中使用的特定.py文件。

django-admin.py loaddata dumpdata.json --settings=<config/settings.py>

其實--settings希望Python包語法,所以也許<mysite>.config.<your settings>.py

+0

我試過了,它沒有工作 - 也許是因爲我使用djangoconfig應用程序來管理我的設置。 – Eeyore 2011-04-23 14:53:33

+0

用我的解釋器輸出編輯我的問題。 manage.py似乎抓住了正確的配置文件,但現在我得到一個新的錯誤。 – Eeyore 2011-04-23 22:31:37

+0

其實你不應該需要--settings與manage.py。看起來像loaddata與manage.py一起工作,所以嘗試離開設置選項。 – JCotton 2011-04-23 23:32:47

5

不要使用django-admin.py比建立一個初始的項目以外的任何其他。一旦你有了一個項目,改用manage.py - 它會設置你的設置文件的引用。

+0

當我遇到類似的情況時,我發現這個答案非常有用。這讓我很快就陷入了困境,謝謝! – 2012-03-02 06:04:49

3

syncdb將加載content_types,您需要在加載數據之前清除該表。事情是這樣的:

c:\> sqlite3 classifier.db 
sqlite> delete from django_content_type; 
sqlite> ^Z 
c:\> python django-admin.py loaddata dumpdata.json 

此外,還要確保你沒有創建一個超級用戶,或任何用戶,當你執行syncdb,因爲這些都可能發生碰撞也與您的數據燈具...