跳转到主要内容

一些额外的管理工具来处理数据固定。

项目描述

https://travis-ci.org/davedash/django-fixture-magic.svg?branch=master

需求

此包需要

  • Python 2.7, 3.6

  • Django 1.8 - 2.1

安装

您可以使用以下方式从PyPI获取fixture-magic

pip install django-fixture-magic

可以使用以下方式安装开发版本

pip install -e git://github.com/davedash/django-fixture-magic#egg=fixture-magic

为了在Python 3中使用,请安装以下内容

pip install future

fixture-magic向manage.py添加了两个命令,因此您应该将其添加到settings.py中的INSTALLED_APPS

INSTALLED_APPS = (
    ...
    'fixture_magic',
    ...
)

用法

有四个命令。dump_object返回特定对象的json表示以及所有依赖项(由ForeignKeys定义)

./manage.py dump_object APP.MODEL PK1 PK2 PK3 ... > my_new_fixture.json

或者

./manage.py dump_object APP.MODEL --query '{"pk__in": [PK1, PK2, PK3]}' > my_new_fixture.json

或者,您可以通过传递星号来获取所有对象及其所有依赖项

./manage.py dump_object APP.MODEL '*' > my_new_fixture.json

现在您可以安全地在测试中加载my_new_fixture.json,而不会出现外键错误。

默认情况下,fixture magic会将相关数据固定存档到您的模型中。您可以通过将--no-follow选项传递给dump_object来禁用此操作。如果您的目标数据库已经部分设置,这很有用。以下是dump_object的示例默认输出

./manage.py dump_object APP.Book
[
  {
      "model": "APP.Author",
      "fields": {
          "pk": 5,
          "name": "Mark Twain",
      }
  },
  {
      "model": "APP.Book",
      "fields": {
          "pk": 2,
          "title": "Tom Sawyer",
          "author": 5
      }
  }
]

使用--no-follow选项运行的结果是

./manage.py dump_object APP.Book –no-follow

[
  {
      "model": "APP.Book",
      "fields": {
          "pk": 2,
          "title": "Tom Sawyer",
          "author": 5
      }
  }
]
注意:

以上示例假设目标数据库中存在ID为5的作者。

第二个命令是merge_fixtures。此命令接受几个 fixtures 文件,根据模型和主键进行简单的去重操作,并返回一个干净的 JSON 文件。如果您有多个可能包含冗余数据的 JSON fixtures,这将很有用。

./manage.py merge_fixtures fixture1.json fixture2.json fixture3.json ... \
> all_my_fixtures.json

第三个命令是reorder_fixtures。此命令接受一个文件和几个模型名称(以app.model格式指定,正如在 fixtures 文件中指定的那样)。这将重新排序您的 fixtures,使您首先指定的模型在 fixtures 中首先出现。如果您在加载模型时经常遇到外键错误,这将很有用。

./manage.py reorder_fixtures fixture.json APP1.MODEL1 APP2.MODEL2 ... \
> ordered_fixture.json

未指定的模型将被附加到末尾。

第四个命令是custom_dump。此命令读取设置CUSTOM_DUMPS

## Fixture Magic
CUSTOM_DUMPS = {
    'addon': {  # Initiate dump with: ./manage.py custom_dump addon id
        'primary': 'addons.addon',  # This is our reference model.
        'dependents': [  # These are the attributes/methods of the model that we wish to dump.
            'current_version',
            'current_version.files.all.0',
        ],
        'order': ('app1.model1', 'app2.model2',),
        'order_cond': {'app1.model1': lambda x: 1 if x.get('fields').get('parent_model1') else 0,
                        'app2.model2': lambda x: -1 * x.get('pk')},
    }
}

它运行相当于dump_object的依赖项(这些依赖项反过来会获取主对象)。然后合并 JSON 文件。这对于导出多依赖对象非常方便。《依赖项》、《顺序》和《顺序条件》是可选的。

依赖项:定义了额外的属性/方法以导出返回值。魔法会将“current_version.files.all.0”转换为“object.current_version.files.all()[0]”。

顺序:指定根据模型类对对象进行导出的顺序。在上面的示例中,所有 app1.model1 对象都将排在任何 app2.model2 对象之前,app2.model2 对象将排在任何其他模型类的对象之前。

顺序条件:指定一个顺序以导出一个或多个特定模型类的对象。在上面的示例中,所有具有真实值 self.parent_model1 属性的 app1.model1 对象将排在任何其他没有此属性真实值的 app1.model1 对象之后。在所有该模型类型的对象列表上调用排序操作,将关联于模型名的值作为 key 关键字参数传递给排序函数。请注意,在排序操作之前,模型对象已经被序列化为字典对象。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分发

django-fixture-magic-0.1.5.tar.gz (8.9 kB 查看散列)

上传时间

构建分发

django_fixture_magic-0.1.5-py2-none-any.whl (12.4 kB 查看散列)

上传时间 Python 2

由以下支持