在django 1.7+数据迁移中轻松使用fixture。
django-migration-fixture的Python项目详细描述
在django 1.7+数据迁移中轻松使用fixture。
应用程序还包含一个管理命令,用于自动转换
initial_data.*
迁移。
在django 1.7之前的initial_data.*
文件中,当
管理命令sync_db
已运行,但此行为是
在Django 1.7停产。因此,如果您依赖于此,此应用程序将非常有用
行为。
本质上,它保留initial_data.*
文件并生成
数据迁移-概述
in the docs。
安装
pipinstalldjango-migration-fixture
然后将django_migration_fixture
添加到INSTALLED_APPS
中。
INSTALLED_APPS+=('django_migration_fixture',)
用法
要自动更改旧的skoolinitial_data.*
文件,最简单的方法是
方法是简单地调用create_initial_data_fixtures
管理
命令。
./manage.py create_initial_data_fixtures
管理命令将自动查找initial_data.*
文件
在INSTALLED_APPS
列表中,为找到的每个文件创建一个数据
迁移,如下所示;
# -*- coding: utf-8 -*-from__future__importunicode_literalsfromdjango.dbimportmodels,migrationsfromdjango_migration_fixtureimportfixtureimportmyappclassMigration(migrations.Migration):operations=[migrations.RunPython(**fixture(myapp,'initial_data.yaml'))]
从这一点上说,只需要运行migrate来应用您的数据 迁徙。
请注意,此解决方案还支持通过删除 使用主键。如果你的迁移不应该是可逆的,那么你可以通过 可逆=假到fixture()。
你可以将此应用程序用于任何设备,它们不必是你的初始数据
文件夹。只需创建一个空迁移并添加对
migrations.RunPython(**fixture(myapp, 'foo.yaml'))
。
API文档
fixture(app, fixtures, fixtures_dir='fixtures', raise_does_not_exist=False, reversible=True)
- app是一个包含您的设备的django应用程序
- fixtures可以接受字符串或fixture文件列表。分机
用作提供给
django.core.serializers.deserialize
的格式
- fixtures\u dir是应用程序中包含fixtures的目录
- {EM1}$IGONORIGO DoToNoTy存在(EEM>)-如果设置为true,那么
django_migration_fixture.FixtureObjectDoesNotExist
在以下情况下引发 试图在夹具中回滚对象不存在。 - reversible-如果设置为
False
,则任何试图反转 迁移将提高django.db.migrations.migration.IrreversibleError
。
本质上fixture()
返回包含键的dict code
以及reverse_code
它们试图应用您的设备并回滚您的
分别是固定装置。
灵感
在试图将一个大型django项目迁移到1.7时,我遇到了一个问题 这导致我创建了djangoticket 24023。
该项目有许多fixture来确保基线状态和转换 他们的代码不是很理想,因此这个项目。
自那时起,该问题已作为 ticket 23699它本身有 已在Django 1.7.2关闭并发布。
不用说,您可能仍然需要为fixture创建数据迁移 不管我遇到什么问题。