django3.1中crossdbjsonfield模型和表单字段的后端口。
django-jsonfield-backport的Python项目详细描述
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虚拟机上进行了测试 环境。在
安装
使用pip或您首选的依赖关系管理工具来安装包。在
^{pr2}$ 在将"django_jsonfield_backport"添加到设置中的INSTALLED_APPS。在
INSTALLED_APPS=[..."django_jsonfield_backport",]
在
使用
要使用模型和表单字段,请从导入JSONFielddjango_jsonfield_backport.models和django_jsonfield_backport.forms, 分别。在
模型字段示例:
fromdjango.dbimportmodelsfromdjango_jsonfield_backport.modelsimportJSONFieldclassContactInfo(models.Model):data=JSONField()
表单域示例:
fromdjangoimportformsfromdjango_jsonfield_backport.formsimportJSONFieldclassContactForm(forms.Form):data=JSONField()
JSONCast、KeyTransform和KeyTextTransform类也是 可从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-jsonfield, vlk-django-jsonfield,linaro-django-jsonfield,jsonfield2, django-jsonfield2,django-softmachine,django-simple-jsonfield, easy_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下授权的。在
- 项目
标签: