一些额外的管理工具来处理数据固定。
项目描述
需求
此包需要
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 的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | d82a4d4f6ade078e942927b5157f0536d0cd0232adfeb943dced0858128dd734 |
|
MD5 | a1ea19ef92a34200f831165dea8c6ed1 |
|
BLAKE2b-256 | 9fbb13ef0015fd389ddc402661454fbb9afb16dd7c782ca7bbefdbe1afd3a92d |
django_fixture_magic-0.1.5-py2-none-any.whl 的哈希值
算法 | 散列摘要 | |
---|---|---|
SHA256 | c50f3de4a46a5844e2c1e2a9ff88b29db0830da8383e43d5ef6a66f1c4bfd8af |
|
MD5 | 62b73755754358cfb791b045c41f041a |
|
BLAKE2b-256 | a419b6202a942f2b94b26141b5385c422c8f252c8f2be0d870cb247aedc0b3db |