自动加载Django Fixture

Pet*_*ham 4 python django fixtures django-fixtures

我正在运行Django 1.7.我的项目文件树是这样的:

/project/app/fixtures/initial_data.json
/project/app/settings.py
Run Code Online (Sandbox Code Playgroud)

我知道我可以运行python manage.py loaddata app/fixtures/initial_data.json命令来填充我的数据库,但我想在python manage.py migrate运行时自动加载它.我的设置包括:

FIXTURE_DIRS = (
    os.path.join(BASE_DIR, '/app/fixtures/'),
)
Run Code Online (Sandbox Code Playgroud)

但是在运行迁移时不应用夹具.什么似乎是问题?

Anz*_*zel 9

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

在这里阅读

自动加载初始数据夹具

自1.7版本后不推荐使用:如果应用程序使用迁移,则不会自动加载灯具.由于Django 1.9中的应用程序将需要迁移,因此不推荐使用此行为.如果要加载应用程序的初始数据,请考虑在数据迁移中执行此操作.

如果创建名为initial_data.[xml/yaml/json]的夹具,则每次运行迁移时都会加载该夹具.这非常方便,但要小心:请记住,每次运行迁移时都会刷新数据.所以不要将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)
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.

  • 我将扩展答案。如果您需要加载特定的夹具,请编写: `execute_from_command_line(['manage.py', "loaddata", "my_specific_fixture_name.json"])` (2认同)