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 |