Django在syncdb时不加载初始数据
我有一个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就不会跳过在这个应用中寻找数据文件。