自动加载 Django Fixture

Automatically Load Django Fixture

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

恐怕不是,这不是你的问题,因为自 Django 1.7 以来已弃用:

READ HERE

Automatically loading initial data fixtures¶

Deprecated since version 1.7: If an application uses migrations, there is no automatic loading of fixtures. Since migrations will be required for applications in Django 1.9, this behavior is considered deprecated. If you want to load initial data for an app, consider doing it in a data migration.

If you create a fixture named initial_data.[xml/yaml/json], that fixture will be loaded every time you run migrate. This is extremely convenient, but be careful: remember that the data will be refreshed every time you run migrate. So don’t use initial_data for data you’ll want to edit.

如果您确实希望它起作用,您可以随时自定义您的 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)

希望对您有所帮助。

遗憾的是没有足够的积分来发表评论!这个 post 很老了... (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'])

通过 运行ning python manage.py makemigrations 这种方式,它会自动加载硬编码文件中规定的夹具数据。

不用说,每次您 运行 该命令都会覆盖对该夹具中的模型所做的任何数据修改。