2

我有一个具有以下结构的 django 项目:

/djninja # project dir
  /djninja # main app dir
  /bands # app dir
  /fans # app dir
  /lyrics # app dir

我创建了一个initial_data.yaml文件来制作syncdb负载装置(我更喜欢 YAML 格式)。根据文档,我将把它放在任何 appfixtures子目录中。所以我做到了,我有:

/djninja
  /djninja
  /bands
    /fixtures
      - initial_data.yaml
  /fans
  /lyrics

但是 syncdb 忽略了该文件。然后我把它移到主项目目录中:

/djninja
  /djninja
    /fixtures
      - initial_data.yaml
  /bands
  /fans
  /lyrics

它仍然被省略。我想在syncdb命令中加载固定装置我做错了什么?

4

2 回答 2

7

显然 DjangoINSTALLED_APPSmodels.py在其中指定的应用程序中查找固定装置。

因此,如果您的应用程序缺少一个,请创建一个空的models.py,Django 不会跳过在该应用程序中查找固定装置。

于 2013-06-25T15:21:16.160 回答
1

initial_data.yaml只要满足以下条件,就应该捡起:

  • 你已经安装了 pyyaml
  • 它位于(in )fixtures中列出的应用程序之一的目录中INSTALLED_APPSsettings.py

因此,鉴于您有 pyyaml,它可能是后者。请确保您的fixtures目录位于其中列出的应用程序之一中,INSTALLED_APPS并且您应该已启动并运行。

在这种布局的情况下:

/djninja
  /djninja
  /bands
    /fixtures
      - initial_data.yaml
  /fans
  /lyrics

添加bandstoINSTALLED_APPS应该可以解决问题,因为bands它是一个有效的包并且是 on PYTHONPATH

如果您希望 Django 在其他目录中查找夹具,您可以按照文档的“Django 在哪里找到夹具文件”小节中给出的建议并使用该FIXTURE_DIRS设置,使其成为要查看的额外目录的列表。

于 2013-03-14T17:03:31.710 回答