在迁移数据步骤中加载装置的应用程序

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。它创建一个迁移步骤,将加载 任何使用当前迁移状态而不是获取 最终模型。

安装

  1. 从pypi安装fixturemigration

    $ pip install django-fixturemigration
    
  2. 编辑项目的settings.py

    INSTALLED_APPS = (
        ...
        'fixturemigration'
    )
    

使用说明

  1. 像往常一样创建fixture,现在fixturemigration 要求fixture文件采用json格式

    $ ./manage.py dumpdata --format=json --indent=4 app1 app2 > aap1/fixtures/20150723_data.json
    

    我们已以名称输入数据,但您可以使用任何名称 想要。

  2. 添加一个特殊的移植并告诉它加载这个fixture

    $ ./manage.py make_fixturemigration app1 --fixture 20150723_data.json
    

    请注意,您需要一个应用程序来存储新的迁移。新的 迁移将依赖于每个 所以当它加载夹具时,状态将与 它是被创造出来的。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
从Java应用程序登录MySql   JavaGSON图形适配器和运行时适配器   java我可以在日期验证器程序的focusLost()中调用focusgoven()吗?   使用InMemoryTestContainerFactory时为JerseyTest设置baseUrl   java为什么通过安卓应用程序在facebook好友墙上发帖返回错误?   javajavafx:画一个摆动的低蚀刻边框可能吗?   调整大小过程中发生java OpenImaj OutOfMemoryError   java如何将结果集的行存储到HASHMAP中   在java库中使用依赖项注入好吗?   多线程java同步多线程问题   jdbc如何编写一个java应用程序,将一个sql查询和一个数字作为输入并启动它   java为什么不支持运行时。freeMemory()仅在创建大型对象时更改?   JaxB从XML到Java类的自动解析   JavaSpring表单与html表单   java无法使用DefaultHttpClient发送大文件