【问题标题】:Django loaddata settings errorDjango加载数据设置错误
【发布时间】:2011-08-11 08:28:42
【问题描述】:

尝试在我的本地机器(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)

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

【问题讨论】:

  • IntegrityError 看起来像是来自内容类型表,它是 contrib 包之一。我敢打赌,您尝试加载的数据库中已经包含某些内容,可能来自先前的加载失败。由于看起来您正在使用 SQLite,因此请删除数据库文件,syncdb 如果需要创建新数据库,然后重试加载。
  • 同意@Mike DeSimone 除了syncdb 将使用数据初始化content_types,因此您可能会遇到相同的错误(按照他的建议查看!)。您可能需要编辑 dumpdata.json 以取出 content_types 的数据。
  • 删除了 sqlite 数据库。做了同步数据库。试过 loaddata = 同样的错误。

标签: django loaddata


【解决方案1】:

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

【讨论】:

  • 当我遇到类似情况时,我发现这个答案非常有帮助。这让我很快摆脱了困境,谢谢!
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

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

    • 使用 set(或 Unix 上的 exportset 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

    【讨论】:

    • 我试过了,但没有用 - 可能是因为我使用 djangoconfig 应用程序来管理我的设置。
    • 用我的解释器的输出编辑了我的问题。 manage.py 似乎正在获取正确的配置文件,但现在我遇到了一个新错误。
    • 实际上你不应该需要 --settings 和 manage.py。看起来 loaddata 可以与 manage.py 一起使用,因此请尝试取消设置选项。
    猜你喜欢
    • 1970-01-01
    • 2016-07-12
    • 2010-12-26
    • 2012-08-07
    • 2015-12-30
    • 2013-10-20
    • 2019-10-13
    • 2011-01-30
    • 2023-03-06
    相关资源
    最近更新 更多