【问题标题】:Automatically Load Django Fixture自动加载 Django Fixture
【发布时间】:2015-03-04 16:48:06
【问题描述】:

我正在运行 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/'),
)

但运行迁移时未应用固定装置。似乎是什么问题?

【问题讨论】:

    标签: python django fixtures django-fixtures


    【解决方案1】:

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

    READ HERE

    自动加载初始数据夹具¶

    自 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)
    

    希望这会有所帮助。

    【讨论】:

    • 这很有帮助!谢谢
    • 我会扩展答案。如果您需要加载特定的夹具,请写:execute_from_command_line(['manage.py', "loaddata", "my_specific_fixture_name.json"])
    • @AlexeiMarinichenko,不错的插件!捕获额外的参数并传递给manage.py 命令更有意义:-)
    【解决方案2】:

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

    • 将“migrate”更改为“makemigrations”的提醒

    if len(sys.argv) == 2 and (sys.argv[1] == 'makemigrations'):

    另外,对于不经常阅读 cmets 的人,请将您的 JSON 文件添加到“execute_from_command_line”函数中。

    execute_from_command_line(['manage.py', 'loaddata', 'YourFileName.json'])

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

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

    【讨论】:

      猜你喜欢
      • 2012-03-19
      • 2015-11-28
      • 2013-08-29
      • 1970-01-01
      • 1970-01-01
      • 2016-10-23
      • 2010-11-08
      • 2011-05-25
      • 2013-08-29
      相关资源
      最近更新 更多