【问题标题】:django doesn't load initial fixtures while syncdbdjango 在 syncdb 时不加载初始固定装置
【发布时间】:2013-03-14 12:59:16
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

  • 您是否安装了 yaml 以便 python 将其识别为固定装置?
  • 我使用 json 语法 (initial_data.json) 并且可以正常工作...也许 .yaml 不是正确的扩展名?你试过其他格式吗?
  • @catherine:我错过了 python-yaml 包。我已经安装了它,但是python仍然没有加载fixtures。
  • @catherine pyyaml 在 Debian 中被称为 python-yaml。所以很可能就是这样。
  • 试试这个进行测试:python manage.py loaddata fixtures/initial_data.yaml

标签: python django django-fixtures


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    initial_data.yaml 应该被拿起,只要:

    • 你已经安装了 pyyaml
    • 它位于INSTALLED_APPS(在settings.py)中列出的您的应用之一的fixtures 目录中

    所以,鉴于您有 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 设置,使其成为要查找的额外目录列表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-06
      • 1970-01-01
      • 1970-01-01
      • 2011-12-14
      • 2012-01-09
      • 1970-01-01
      • 2016-04-01
      • 2011-05-04
      相关资源
      最近更新 更多