我正在运行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/'),
)
但是在运行migrate时,fixture并没有被应用。有什么问题吗?
3条答案
按热度按时间dl5txlt91#
恐怕不行,这不是你的问题,因为这是从Django 1.7开始就被弃用的:
这里读到
自动加载初始数据fixture ¶
自版本1.7起弃用:如果应用程序使用迁移,则没有自动加载fixture。由于Django 1.9中的应用程序需要迁移,因此这种行为被认为是不推荐的。如果要为应用加载初始数据,请考虑在数据迁移中执行此操作。
如果您创建了一个名为initial_data.[xml/yaml/json]的fixture,那么每次运行migrate时都会加载该fixture。这非常方便,但要小心:请记住,每次运行migrate时都会刷新数据。所以不要对你想要编辑的数据使用initial_data。
如果你真的想这样做,你可以随时定制你的
manage.py
,希望这对你有帮助。
xurqigkl2#
遗憾的是,没有足够的分数来发表评论!这篇文章很老了……(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
,它将自动加载在该文件中指定的固定装置数据。不用说,每次运行该命令时,它都会覆盖对该fixture中的模型所做的任何数据修改。
3zwtqj6y3#
我发现自己也有类似的要求。我需要用一个命令聚合和加载项目中所有应用程序的fixture。
python manage.py loaddata --all
应该已经足够了,但由于一些奇怪的原因-我的项目设置中的FIXTURE_DIRS
没有被读取。因此,我调整了manage.py
文件。python manage.py loaddata --all
可以在将必要的更改迁移到DB后成功运行。