我正在运行Django 1.7。我的项目文件树是这样的:
/project/app/fixtures/initial_data.json
/project/app/settings.py
我知道我可以运行python manage.py loaddata app/fixtures/initial_data.json
命令,该命令可用于填充我的数据库,但是我希望在运行python manage.py migrate
时自动加载它。我的设置包括:
FIXTURE_DIRS = (
os.path.join(BASE_DIR, '/app/fixtures/'),
)
但是在运行迁移时不应用fixture。什么似乎是问题?
答案 0 :(得分:6)
我不敢,这不是你的问题,因为自Django 1.7以来这已经被弃用了:
自动加载初始数据装置¶
从1.7版开始不推荐使用:如果应用程序使用迁移,那么就在那里 没有自动装载固定装置。由于需要迁移 对于Django 1.9中的应用程序,考虑此行为 弃用。如果要加载应用程序的初始数据,请考虑 在数据迁移中完成。
如果你创建一个名为initial_data的夹具。[xml / yaml / json],那就是 每次运行迁移时都会加载fixture。这非常 方便,但要小心:记住数据会被刷新 每次运行迁移。所以不要将initial_data用于数据 想要编辑。
如果您确实希望这样做,您可以随时自定义manage.py
,
# import execute_from_command_line
from django.core.management import execute_from_command_line
# add these lines for loading data
if len(sys.argv) == 2 and sys.argv[1] == 'migrate':
execute_from_command_line(['manage.py', 'loaddata'])
execute_from_command_line(sys.argv)
希望这有帮助。
答案 1 :(得分:0)
严重不足以发表评论!这篇文章相当老...(Django 1.7-1.9)
更改Manage.py仍然是有效的选择!
if len(sys.argv) == 2 and (sys.argv[1] == 'makemigrations'):
另外,对于那些不经常阅读注释的人,请将您的JSON文件添加到“ execute_from_command_line”功能中。
execute_from_command_line(['manage.py', 'loaddata', 'YourFileName.json'])
通过运行python manage.py makemigrations
,它将自动加载在给定硬编码的文件中说明的灯具数据。
不用说,每次您运行该命令时,它将覆盖对该固定装置中的模型所做的任何数据修改。