在syncdb时,django不会加载初始灯具

时间:2013-03-14 12:59:17

标签: python django django-fixtures

我有一个django项目,结构如下:

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

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

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

但是syncdb省略了该文件。然后我将其移动到主项目目录中:

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

仍然被忽略了。我想在syncdb命令中加载灯具我做错了什么?

2 个答案:

答案 0 :(得分:7)

显然Django会在INSTALLED_APPS中指定的应用中查找具有models.py内容的灯具。

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

答案 1 :(得分:1)

initial_data.yaml应该被选中:

  • 你安装了pyyaml
  • 它位于fixturesINSTALLED_APPS
  • 中列出的某个应用的settings.py目录中

所以,鉴于你有pyyaml,它可能是后者。请确保您的fixtures目录位于INSTALLED_APPS中列出的某个应用内,并且您应该已启动并运行。

如果是这种布局:

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

bands添加到INSTALLED_APPS应该可以解决问题,因为bands是一个有效的包,并且在PYTHONPATH上。

如果您希望Django在其他目录中查找灯具,您可以按照"Where Django finds fixture files" subsection of the docs中给出的建议使用FIXTURE_DIRS设置,使其成为要查看的额外目录的列表。