我在我的 Django 应用程序中使用了固定装置,但只有两个应用程序正在加载它们的固定装置。
当我使用 --verbosity=2 手动运行 loaddata 时,我可以看到它只在两个应用程序中显示,尽管我在内部创建了更多的固定装置目录。
所有应用程序均已正确安装在 settings.py 中。
从文档看来,Django 应该在每个已安装应用程序的 fixtures/ 目录中进行搜索。
任何想法为什么某些应用程序被忽略?
我在我的 Django 应用程序中使用了固定装置,但只有两个应用程序正在加载它们的固定装置。
当我使用 --verbosity=2 手动运行 loaddata 时,我可以看到它只在两个应用程序中显示,尽管我在内部创建了更多的固定装置目录。
所有应用程序均已正确安装在 settings.py 中。
从文档看来,Django 应该在每个已安装应用程序的 fixtures/ 目录中进行搜索。
任何想法为什么某些应用程序被忽略?
每次执行 syncdb 时都会导入 Initial_data。据我所知,它还会覆盖您手动完成的任何更改。
要加载其他夹具,您必须使用 manage.py loaddata夹具名称。如果您在所有应用程序中使用通用命名方案,那将非常有效。如果不这样做,则必须为 loaddata 提供每个名称,或使用 find 获取灯具列表并在每个灯具中执行 loaddata:
编辑:(当我安装 django 包时我将 manage.py 添加到 virtualenv 中的 /bin 时,我只使用 manage.py,如果你不使用,你当然需要 python manage.py loaddata)
find . -name "*.json" -exec manage.py loaddata {} \;
我在 fabfile 中使用它来自动进行分段安装:
def load_all_fixtures():
"""Loads all the fixtures in every dir"""
with cd(env.directory):
run("""
source /usr/local/bin/virtualenvwrapper.sh &&
workon %s &&
find -L . -name "*.json" -exec manage.py loaddata {} \;
""" % env.virtualenv )
尝试这样调用
python manage.py loaddata initial_data
或者以编程方式你可以这样称呼它
from django.core.management import call_command
call_command('loaddata', 'initial_data', verbosity=3, database='default')
问题是 Django 只在提供模型的应用程序中寻找固定装置。您可能有一个没有模型的应用程序,但您仍想加载一些固定装置(可能是另一个已安装应用程序的示例数据)。
Django中这种行为的罪魁祸首get_apps()
在于loaddata.py
:
要诱使 Django 查看您应用程序的<app>/fixtures/
文件夹,您必须向应用程序添加一个(空)models.py
文件。(友善并在该文件中添加评论以使事情变得清晰!)
<应用程序>/models.py
"""
No real model, just an empty file to make Django load the fixtures.
"""
之后,python manage.py loaddata <fixture>
手动运行将找到您应用的夹具文件。
您必须将夹具数据放在 initial_data.[json|xml,...] 文件中。
我认为默认情况下只加载这些文件。
appdir/fixtures/initial_data.json