2011-04-23 36 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,因为这些都可能发生碰撞也与您的数据灯具...