Django模型中可重用的字段,允许您存储经过验证的JSON。
项目描述
jsonfield 是一个可重用的模型字段,允许您存储经过验证的JSON,自动处理与数据库之间的序列化和反序列化。使用时,将 jsonfield.JSONField 添加到您的模型之一。
注意: django.contrib.postgres 现在支持 PostgreSQL 的 jsonb 类型,包括扩展的查询功能。如果您是 PostgreSQL 的最终用户并且想要完整功能的 JSON 支持,则建议您使用内置的 JSONField。然而,当您的应用程序需要数据库无关性时,或者当内置 JSONField 的扩展查询功能未被利用时,jsonfield 仍然很有用。例如,配置字段。
需求
jsonfield 旨在支持所有当前 Django 版本,但是明确测试的版本是
- Python 3.6, 3.7, 3.8 
- Django 2.2, 3.0 
安装
pip install jsonfield使用
from django.db import models
from jsonfield import JSONField
class MyModel(models.Model):
    json = JSONField()查询
如上所述,JSONField 并不打算提供扩展查询功能。但是,您可以执行与常规文本字段提供的相同的基本查找(例如,exact 或 regex 查找)。由于值以序列化的 JSON 格式存储,因此强烈建议您测试您的查询以确保返回预期的结果。
处理空值
一个模型字段的 null 参数通常通过设置非空约束来控制是否可以在其列中存储空值。然而,由于 JSONField 序列化其值(包括空值),此选项因此控制空值如何持久化。如果 null=True,则空值将 不 序列化,并以空值的形式存储在数据库中。如果 null=False,则空值将存储为其序列化形式。
这反过来影响空值的查询方式。两个字段都支持精确匹配
MyModel.objects.filter(json=None)但是,如果您想使用 isnull 查找,则必须设置 null=True。
class MyModel(models.Model):
    json = JSONField(null=True)
MyModel.objects.filter(json__isnull=True)请注意,由于 JSONField.null 不能防止存储空值,因此必须通过验证器来处理这一点。
高级使用
默认情况下,Python 将 json 反序列化为字典对象。这种行为与标准 json 行为不同,因为 Python 字典没有有序键。为了克服这一限制并保持 OrderedDict 键的排序顺序,可以在模型初始化时调整反序列化。
import collections
class MyModel(models.Model):
    json = JSONField(load_kwargs={'object_pairs_hook': collections.OrderedDict})其他字段
jsonfield.JSONCharField
继承自 models.CharField 而不是 models.TextField。
运行测试
测试套件需要 tox。
$ pip install tox然后,运行 tox 命令,该命令将运行所有测试任务。
$ tox或者,要测试单个任务(例如 Django 2.0 在 Python 3.6 上)
$ tox -e py36-django20发布流程
- 更新变更日志 
- 在 setup.py 中更新包版本 
- 检查 setup.py 和 readme 中的支持版本 
- 为版本创建 git 标签 
- 将发布版本上传到 PyPI 测试服务器 
- 将发布版本上传到官方 PyPI 服务器 
$ pip install -U pip setuptools wheel twine
$ rm -rf dist/ build/
$ python setup.py sdist bdist_wheel
$ twine upload -r test dist/*
$ twine upload dist/*变更
查看 变更日志。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源代码分发
构建分发
jsonfield-3.1.0.tar.gz 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 7e4e84597de21eeaeeaaa7cc5da08c61c48a9b64d0c446b2d71255d01812887a | |
| MD5 | 0758b8a3b6cc67a3ba74dccdee3e8f4a | |
| BLAKE2b-256 | 103b4542fd9465908380ba4321329d3cdfeb959769ec48d878dead978286b48d | 
jsonfield-3.1.0-py3-none-any.whl 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | df857811587f252b97bafba42e02805e70a398a7a47870bc6358a0308dd689ed | |
| MD5 | 13f1ad7433832529b9182c4bc772e389 | |
| BLAKE2b-256 | 7c973a4805532a9c1982368fd9f37b58133419e83704744b733ccab9e9827176 |