3

在我的本地机器(win/sqlite)上尝试使用 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)

项目>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
4

3 回答 3

8

django-admin.py除了设置初始项目之外,不要用于任何其他用途。有了项目后,请manage.py改用 - 它设置对您的设置文件的引用。

于 2011-04-23T09:16:51.760 回答
3

syncdb将加载 content_types,您需要在加载数据之前清除该表。像这样的东西:

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

另外,请确保您在同步数据库时不要创建超级用户或任何用户,因为它们也可能与您的数据夹具发生冲突......

于 2012-08-06T13:55:00.533 回答
1

有两种标准方法可以将设置提供给 Django。

  • 使用set(或在 Unix 上导出)set DJANGO_SETTINGS_MODULE=mysite.settings
  • 或者作为一个选项django-admin.py --settings=mysite.settings

Django-config做的事情不同,因为它允许你有多个设置文件。Django-config 与 manage.py 一起使用来指定使用哪个。您应该尽可能使用 manage.py;它设置了环境。在你的情况下试试这个--settings指向你想从 django-config 的配置文件夹中使用的特定 .py 文件。

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

实际上 --settings 想要 python 包语法所以也许<mysite>.config.<your settings>.py

于 2011-04-23T06:19:42.777 回答