跳转到主要内容

Django 3.1的跨数据库JSONField模型和表单字段的回滚。

项目描述

https://img.shields.io/pypi/v/django-jsonfield-backport.svg https://img.shields.io/pypi/l/django-jsonfield-backport https://github.com/laymonage/django-jsonfield-backport/workflows/Test/badge.svg https://coveralls.io/repos/laymonage/django-jsonfield-backport/badge.svg https://img.shields.io/badge/code%20style-black-000000.svg

从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虚拟环境中进行了测试。

安装

  1. 使用 pip 或您首选的依赖项管理工具安装包。

    $ pip install django-jsonfield-backport
  2. "django_jsonfield_backport" 添加到您的设置中的 INSTALLED_APPS

    INSTALLED_APPS = [
        ...
        "django_jsonfield_backport",
    ]

使用方法

要使用模型和表单字段,分别从 django_jsonfield_backport.modelsdjango_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 还提供了 JSONCastKeyTransformKeyTextTransform 类。

文档

由于此包是移植版,官方Django 3.1文档中的 models.JSONFieldforms.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-jsonfieldvlk-django-jsonfieldlinaro-django-jsonfieldjsonfield2django-jsonfield2django-softmachinedjango-simple-jsonfieldeasy_jsonfielddjango-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 许可。

项目详情


下载文件

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

源分布

django-jsonfield-backport-1.0.5.tar.gz (15.1 kB 查看哈希)

上传时间

构建分布

django_jsonfield_backport-1.0.5-py3-none-any.whl (13.6 kB 查看哈希)

上传时间 Python 3

支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面