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

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类之间并发性不一致的HashMap   插件如何在JavaSwing中使用UIManager和Classloader从外部jar安装外观?   java JasperReports:找不到子报表   在项目中找不到java生成的Javadoc文件   java BigDecimal。multiply()和divide()方法返回十六进制数。为什么?   java统计出现次数并从字符串中删除重复项   调用运算符时发生java NullPointerException   Spring和Hibernate之间的java配置错误   JavaZK将用户重定向回上一页   Javasocket为传出连接指定特定的网络接口   如果拖动到某个区域外,java Make按钮操作将被取消   如何在Eclipse for selenium 3.141.59中添加Java文档链接   java从匹配条件的数组中获取所有索引   docker未连接到RemoteWebDriver的java Gitlab ci selenium测试   java重写run方法   utf 8如何使用java解码UTF8编码的字符串?   java如何从eclipse调试部署在tomcat上的web应用程序?   将字母字符与前面没有百分号的Java正则表达式匹配