Django在syncdb时不加载初始数据

2 投票
2 回答
1727 浏览
提问于 2025-04-17 19:05

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

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

我创建了一个叫做 initial_data.yaml 的文件,目的是让 syncdb 加载一些数据(我比较喜欢用YAML格式)。根据文档,我应该把这个文件放在任意一个应用的 fixtures 子目录下。所以我就这么做了,结果是:

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

但是 syncdb 却没有加载这个文件。然后我把它移动到了主项目目录下:

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

结果还是没有加载。我想在 syncdb 命令中加载这些数据,我到底哪里做错了呢?

2 个回答

1

要使用 initial_data.yaml 文件,必须满足以下条件:

  • 你需要安装了 pyyaml
  • 这个文件要放在你在 settings.py 文件中 INSTALLED_APPS 列出的某个应用的 fixtures 目录里

所以,如果你已经安装了 pyyaml,那问题可能出在第二点。请确保你的 fixtures 目录在 INSTALLED_APPS 列出的某个应用里面,这样就可以正常使用了。

如果你的文件结构是这样的:

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

那么只要把 bands 加入到 INSTALLED_APPS 中就可以了,前提是 bands 是一个有效的包,并且在 PYTHONPATH 中。

如果你想让 Django 在其他目录中查找 fixtures,可以参考 文档中关于“Django 查找 fixture 文件的位置” 的建议,使用 FIXTURE_DIRS 设置,把它设置成一个包含额外目录的列表。

7

看起来Django会在INSTALLED_APPS里指定的应用中寻找数据文件,这些应用需要有一个models.py文件。

所以如果你的应用没有这个文件,记得创建一个空的models.py,这样Django就不会跳过在这个应用中寻找数据文件。

撰写回答