django3.1中crossdbjsonfield模型和表单字段的后端口。

django-jsonfield-backport的Python项目详细描述


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

django3.1中cross-DBJSONField模型和表单字段的后端口。在

fromdjango.dbimportmodelsfromdjango_jsonfield_backport.modelsimportJSONFieldclassContactInfo(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()

特点

django3.1中JSONField模型和表单字段的大多数特性是 支持。在

  • MariaDB、MySQL、Oracle、PostgreSQL和SQLite支持。在
  • JSONField查找和转换支持。在
  • 自定义编码器和解码器支持。在

由于对Django的api的访问受限,一些特性不受支持。在

  • 不支持自省。在
  • 在MariaDB和Oracle上,Casting到JSONField必须使用 包含JSONCast类。在

这个包与django3.1中的JSONField完全兼容。那个 意味着您只需要在 最后升级到django3.1。如果你让它们保持原样,这个包裹 将使用内置的JSONField并引发系统警告。在

要求

此软件包支持以下最新修补程序版本并进行了测试:

  • ^{str1}$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.1se进行测试)
  • PostgreSQL:9.5、10、11、12
  • SQLite:3.9.0+,扩展名为JSON1

所有数据库后端都使用其驱动程序的最新版本进行测试。 SQLite也在GitHub Actions的最新macOS和Windows虚拟机上进行了测试 环境。在

安装

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

    ^{pr2}$ 在
  2. "django_jsonfield_backport"添加到设置中的INSTALLED_APPS。在

    INSTALLED_APPS=[..."django_jsonfield_backport",]

使用

要使用模型和表单字段,请从导入JSONFielddjango_jsonfield_backport.modelsdjango_jsonfield_backport.forms, 分别。在

模型字段示例:

fromdjango.dbimportmodelsfromdjango_jsonfield_backport.modelsimportJSONFieldclassContactInfo(models.Model):data=JSONField()

表单域示例:

fromdjangoimportformsfromdjango_jsonfield_backport.formsimportJSONFieldclassContactForm(forms.Form):data=JSONField()

JSONCastKeyTransformKeyTextTransform类也是 可从django_jsonfield_backport.models获得。在

文件

因为这个包是一个backport,所以官方的django3.1文档 ^{tt12}$和{a9}大多与此兼容 包裹。在

基本原理

在创建这个包时,JSONField实现存在于多个 PyPI上的包:

  • Django: 在django3.1之前,^{tt14}中只存在PostgreSQL的JSONField$ 模块。在
  • jsonfield: 1.1k星,跨数据库支持,无扩展查询功能。在
  • django-annoying: 787stars,有一个基于TextField的JSONField,没有扩展查询 能力。在
  • Django-MySQL: 364stars,有一个MariaDB/MySQL专用JSONField和扩展查询 功能(与contrib.postgres中的功能不完全相同)。在
  • django-jsonfallback: 26星,以前使用contrib.postgres的JSONField和Django MySQL 返回到基于TextField的JSONField。在
  • django-json-field: 116星,基于TextField的JSONField,带有定制的编码器和解码器 支持无扩展查询功能(未维护)。在
  • django-jsonfield: 21星,跨数据库支持,无扩展查询功能。在
  • django-jsonfield-compat: 8星,contrib.postgresJSONField和 django jsonfield公司。在
  • oracle-json-field: 查询功能,仅限Oracle JSONField 2 (与contrib.postgres中的不完全相同)。在

以及其他未维护的包,如dj-jsonfieldvlk-django-jsonfieldlinaro-django-jsonfieldjsonfield2django-jsonfield2django-softmachinedjango-simple-jsonfieldeasy_jsonfield,和{a27}。在

为什么要创建另一个?

在django3.1中的新JSONField之前,还没有实现 JSONField支持Django支持的所有数据库后端 或更少contrib.postgresJSONField 提供。在

Django’s release process不将新功能向后移植到以前的功能 释放。但是,当前的LTS版本是2.2,直到 2022年4月。下一个LTS版本是在2021年4月发布的django3.2 django3.1扩展支持的结束。在

有些项目只使用Django的LTS版本。也有不兼容的地方 在django3.0和3.1之间。因此,使用django3.1可能不是 现在有些人。在

因为JSONField似乎很受欢迎,而且它的工作方式与 独立软件包,我决定创建一个后端口。在

另外,我是co-author of the new JSONField。` \(ツ)´´

许可证

此包是在BSD 3-Clause License下授权的。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java GWT对话框从不显示帮助   java在简单的MapReduce作业中带来了极大的开销   javacom。mysql。jdbc。例外情况。jdbc4。MySQLIntegrityConstraintViolationException:列不能为null/onetoone映射   如何通过TCP/IP与Java和Labview进行通信,并发送浮点数据缓冲区?   java Apache camel与spring事件基本示例   java如何使我的秒表应用程序在完全关闭后仍能运行?   java Nutch爬网错误输入路径不存在   java是Mapreduce中按值传递还是按引用传递的键?   正则表达式替换java中的特定字符   Java DOM XML解析   java Eclipse未显示服务器的项目   使用Arraylist进行快速排序的排序Java实现疑难解答   java Split text包含字符串列表中的数字   检查Java中的两个lambda是否执行相同的代码?   java为什么dispatchTouchEvent避免在屏幕上单击?