5

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

/project/app/fixtures/initial_data.json
/project/app/settings.py

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

FIXTURE_DIRS = (
    os.path.join(BASE_DIR, '/app/fixtures/'),
)

但是运行 migrate 时,fixture 不会被应用。似乎是什么问题?

4

2 回答 2

10

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

在这里阅读

自动加载初始数据夹具¶

1.7 版后已弃用:如果应用程序使用迁移,则不会自动加载固定装置。由于 Django 1.9 中的应用程序需要迁移,因此此行为被视为已弃用。如果您想为应用加载初始数据,请考虑在数据迁移中进行。

如果您创建一个名为 initial_data.[xml/yaml/json] 的夹具,则每次运行 migrate 时都会加载该夹具。这非常方便,但要小心:请记住,每次运行 migrate 时都会刷新数据。因此,请勿将 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)

希望这可以帮助。

于 2015-01-06T23:00:49.450 回答
0

可悲的是没有足够的积分能够发表评论!这篇文章很老了...(Django 1.7 - 1.9)
更改 Manage.py 仍然是一个有效的选择!

  • 将“migrate”更改为“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它会自动加载您在该文件中给出的硬编码的夹具数据。

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

于 2020-12-04T16:34:02.670 回答