开发者

Django loaddata settings error

When trying to use loaddata on my local machine (win/sqlite):

python django-admin.py loaddata dumpdata.json

I get the following error:

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.

I am using djangoconfig app if that helps:

"""
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] = getatt开发者_开发百科r(overrides, attribute)

projects>python manage.py loaddata dumpdata.json --settings=config.base

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


Don't use django-admin.py for anything other than setting up an initial project. Once you have a project, use manage.py instead - it sets up the reference to your settings file.


syncdb will load content_types, you need to clear that table before loading data. Something like this:

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

Also, make sure you do not create a superuser, or any user, when you syncdb, as those are likely to also collide with your data fixture ...


There are two standard ways to provide your settings to Django.

  • Using set (or export on Unix) set DJANGO_SETTINGS_MODULE=mysite.settings
  • Alternatively as an option with django-admin.py --settings=mysite.settings

Django-config does things differently because it allows you to have multiple settings files. Django-config works with manage.py to specify which to use. You should use manage.py whenever possible; it sets up the environment. In your case try this where --settings points to the specific .py file you want to use from django-config's config folder.

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

Actually --settings wants python package syntax so maybe <mysite>.config.<your settings>.py

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜