在迁移数据步骤中加载装置的应用程序
django-fixturemigration的Python项目详细描述
固定装置迁移
一个django应用程序,允许您在特定的迁移中加载fixture 国家。
怎么了?
如果你的django应用程序使用fixture,那么你已经知道 自从django版本1.7以来,不赞成加载fixture。如果你 要加载初始数据,必须使用数据迁移。
使用data migration 很简单,您可以添加一个调用函数的runpython迁移 例如:
def load_data(apps, schema_editor): Book = apps.get_model('library', 'Book') Book.objects.bulk_create([ Book(name='The Litte Prince'), Book(name='The Ingenious Gentleman Don Quixote of La Mancha'), ])
这很好,但如果你需要创建许多对象,它可以是 写这个函数很痛苦。有些人试图加载完整的fixture文件 使用以下代码执行runpython迁移:
def load_data(apps, schema_editor): call_command('loaddata', 'books_data.json')
好吧,这似乎有效,但有一个严重的问题。如果你的模特 继续改进您将添加更多的模式迁移和所有内容 除非你尝试从零开始迁移,否则看起来工作正常。
当您到达数据迁移时,loaddata命令将尝试 使用 模型,但目前您正在应用迁移和旧的 夹具与您的模型不兼容。然后你必须移除 数据迁移,应用所有迁移,将旧的fixture更新到 新的更改并手动加载。
最后,您将结束维护一个fixture文件并手动加载它 在应用所有迁移之后。
解决办法是什么?
如果你真的想在迁移步骤中加载一个fixture 可以使用FixtureMigration。它创建一个迁移步骤,将加载 任何使用当前迁移状态而不是获取 最终模型。
安装
从pypi安装fixturemigration
$ pip install django-fixturemigration
编辑项目的settings.py:
INSTALLED_APPS = ( ... 'fixturemigration' )
使用说明
像往常一样创建fixture,现在fixturemigration 要求fixture文件采用json格式
$ ./manage.py dumpdata --format=json --indent=4 app1 app2 > aap1/fixtures/20150723_data.json
我们已以名称输入数据,但您可以使用任何名称 想要。
添加一个特殊的移植并告诉它加载这个fixture
$ ./manage.py make_fixturemigration app1 --fixture 20150723_data.json
请注意,您需要一个应用程序来存储新的迁移。新的 迁移将依赖于每个 所以当它加载夹具时,状态将与 它是被创造出来的。