自动加载Django Fixture

时间:2015-01-06 22:39:51

标签: python django fixtures django-fixtures

我正在运行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。什么似乎是问题?

2 个答案:

答案 0 :(得分:6)

我不敢,这不是你的问题,因为自Django 1.7以来这已经被弃用了:

READ HERE

  

自动加载初始数据装置¶

     

从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仍然是有效的选择!

  • 提醒将“迁移”更改为“ makemigrations”

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,它将自动加载在给定硬编码的文件中说明的灯具数据。

不用说,每次您运行该命令时,它将覆盖对该固定装置中的模型所做的任何数据修改。