我在我的Django应用程序中使用了灯具,但只有两个应用程序正在加载它们的灯具。
当我使用--verbosity = 2手动运行loaddata时,我可以看到它只查看了两个应用程序,尽管我在内部创建了更多的fixtures目录。
所有应用都已正确安装在settings.py。
中从文档中可以看出,Django应该在每个已安装的应用程序的fixtures /目录中进行搜索。
为什么有些应用被忽略了?
答案 0 :(得分:5)
每次执行syncdb时都会导入Initial_data。尽管我记得很公平,但它也会覆盖您手动完成的任何更改。
要加载其他灯具,您必须使用manage.py loaddata fixturename。 如果您在所有应用程序中使用通用命名方案,那么这种方法很有效。 如果不这样做,则必须为loaddata指定每个名称,或使用find来获取 每个中的fixture和exec loaddata列表:
编辑:(因为我在virtualenv中将manage.py添加到/ bin中,当我安装django包时,我只使用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 )
答案 1 :(得分:4)
尝试以这种方式调用
python manage.py loaddata initial_data
或者以编程方式将其称为
from django.core.management import call_command
call_command('loaddata', 'initial_data', verbosity=3, database='default')
答案 2 :(得分:3)
问题是Django只在提供模型的应用中寻找灯具。您可能有一个没有型号的应用程序,但您仍想加载一些灯具(可能是另一个已安装应用的示例数据)。
Django中此行为的罪魁祸首是get_apps()
中的loaddata.py
:
要欺骗Django查看应用的<app>/fixtures/
文件夹,您必须向应用添加(空)models.py
文件。 (很好,并对该文件发表评论以使事情变得清晰!)
<强>&LT;应用&GT; /models.py 强>
"""
No real model, just an empty file to make Django load the fixtures.
"""
之后,手动运行python manage.py loaddata <fixture>
将找到您应用的灯具文件。
答案 3 :(得分:2)
您必须将夹具数据放在initial_data。[json | xml,...]文件中。
我认为默认情况下只加载那些文件。
APPDIR /装置/ initial_data.json