Django 3.1的跨数据库JSONField模型和表单字段的回滚。
项目描述
从Django 3.1回滚跨数据库JSONField模型和表单字段。
from django.db import models
from django_jsonfield_backport.models import JSONField
class ContactInfo(models.Model):
data = JSONField()
ContactInfo.objects.create(data={
'name': 'John',
'cities': ['London', 'Cambridge'],
'pets': {'dogs': ['Rufus', 'Meg']},
})
ContactInfo.objects.filter(
data__name='John',
data__pets__has_key='dogs',
data__cities__contains='London',
).delete()
功能
支持Django 3.1的JSONField模型和表单字段的大部分功能。
支持MariaDB、MySQL、Oracle、PostgreSQL和SQLite。
支持JSONField查找和转换。
支持自定义编码和解码。
由于对Django的API访问有限,某些功能不支持。
不支持自省。
在MariaDB和Oracle上,将数据转换为JSONField必须使用包含的JSONCast类。
此包与Django 3.1的JSONField完全兼容。这意味着当您最终升级到Django 3.1时,只需更改导入并编辑迁移即可。如果保持不变,此包将使用内置的JSONField,并会引发系统警告。
需求
本包支持并针对以下最新补丁版本进行了测试:
Python: 3.5(仅支持Django 2.2),3.6,3.7,3.8,3.9
Django 2.2, 3.0, 3.1
MariaDB 10.2, 10.3, 10.4, 10.5
MySQL 5.7, 8.0
Oracle: 12.2+(仅针对12.2.0.1 SE进行了测试)
PostgreSQL 9.5, 10, 11, 12
SQLite: 3.9.0+,带有JSON1 扩展
所有数据库后端都使用其驱动程序的最新版本进行了测试。SQLite也在GitHub Actions的最新macOS和Windows虚拟环境中进行了测试。
安装
使用 pip 或您首选的依赖项管理工具安装包。
$ pip install django-jsonfield-backport
将 "django_jsonfield_backport" 添加到您的设置中的 INSTALLED_APPS。
INSTALLED_APPS = [ ... "django_jsonfield_backport", ]
使用方法
要使用模型和表单字段,分别从 django_jsonfield_backport.models 和 django_jsonfield_backport.forms 导入 JSONField。
模型字段示例
from django.db import models
from django_jsonfield_backport.models import JSONField
class ContactInfo(models.Model):
data = JSONField()
表单字段示例
from django import forms
from django_jsonfield_backport.forms import JSONField
class ContactForm(forms.Form):
data = JSONField()
从 django_jsonfield_backport.models 还提供了 JSONCast、KeyTransform 和 KeyTextTransform 类。
文档
由于此包是移植版,官方Django 3.1文档中的 models.JSONField 和 forms.JSONField 与本包大多兼容。
理由
在本包创建时,PyPI上存在多个包含JSONField实现的包
Django:在Django 3.1之前,仅在 contrib.postgres 模块中存在仅支持PostgreSQL的JSONField。
jsonfield:1.1k个星,跨数据库支持,但没有扩展查询功能。
django-annoying:787个星,基于 TextField 的JSONField,没有扩展查询功能。
Django-MySQL:364个星,仅支持MariaDB/MySQL的JSONField,具有扩展查询功能(与 contrib.postgres 不完全相同)。
django-jsonfallback:26个星,在回退到基于 TextField 的JSONField之前,使用 contrib.postgres 和 Django-MySQL中的JSONField。
django-json-field:116个星,基于 TextField 的JSONField,具有自定义编码器和解码器支持,但没有扩展查询功能(已停更)。
django-jsonfield:21个星,跨数据库支持,但没有扩展查询功能。
django-jsonfield-compat:8个星,为 contrib.postgres JSONField 和 django-jsonfield 提供兼容层。
oracle-json-field:2个星,仅支持Oracle的JSONField,具有扩展查询功能(与 contrib.postgres 不完全相同)。
还包括其他未维护的包,如 dj-jsonfield、vlk-django-jsonfield、linaro-django-jsonfield、jsonfield2、django-jsonfield2、django-softmachine、django-simple-jsonfield、easy_jsonfield 和 django-jsonbfield。
为什么还要创建另一个包呢?
直到 Django 3.1 引入新的 JSONField 之前,还没有实现支持 Django 所支持的所有数据库后端的 JSONField,其功能与 contrib.postgres 提供的 JSONField 大致相同。
Django 的发布流程 不会将新特性回滚到之前的版本。然而,当前的 LTS 版本是 2.2,它仍然受到支持,直到 2022 年 4 月。下一个 LTS 版本是 2021 年 4 月发布的 Django 3.2,它恰好是 Django 3.1 扩展支持的结束。
一些项目只使用 Django 的 LTS 版本。Django 3.0 和 3.1 之间存在不兼容性。因此,目前对某些人来说,使用 Django 3.1 可能不是一个选择。
由于 JSONField 似乎非常受欢迎,并且作为一个独立的包表现良好,我决定创建一个回滚版本。
此外,我是新 JSONField 的合著者。 ¯\_(ツ)_/¯
许可证
本软件包遵循 BSD 3-Clause License 许可。
项目详情
下载文件
下载您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源分布
构建分布
哈希值 for django_jsonfield_backport-1.0.5-py3-none-any.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 727b402bad632e38539b489e48aefa6ffe03cedba76ac1f11b455423b3225a2d |
|
MD5 | ea0f0652ea616ee12e6cee580091ae6a |
|
BLAKE2b-256 | b9686846a70fc99d239c6a4ebcc4657796dd0a7910a314f466823e6fd54cff77 |