django2.x使用JSONField
2022/7/10 6:20:04
本文主要是介绍django2.x使用JSONField,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
参考:
Django ORM中原生JSONField的使用方法
Django3.x和2.x JSONFiled使用
前言
使用JSONField在反序列化的时候有问题,jsonfield.JSONField
会报错"不是有效的字符串",rest_framework.fields.JSONField
会忽略json字段导致序列化了个寂寞。
jsonfield.JSONField
和JSONField
在数据库中存储都一样,都是json字段,使用赋值也是dict的形式。但前者用drf序列化出的数据(serializer.data)中该字段是字符串,后者是字典。
jsonfield模块
这里有个使用jsonfield.JSONField
的解决办法,在将request.data
给序列化器进行反序列化之前,对data里面的json字典数据用json.dumps()
转字符串。
def update(self, request, *args, **kwargs): data = request.data data["config"] = json.dumps(data["config"]) instance = DataSyncConfig.objects.get(pk=DATA_SYNC_CONFIG_ID) serializer = self.get_serializer(instance, data=data) serializer.is_valid(raise_exception=True) self.perform_update(serializer) return Response(serializer.data)
但会产生另一个问题就是数据库存的是字符串而不是json了。
当然也有解决办法,重写to_representation()
和to_internal_value
方法对序列化前后的数据做处理。
但是太麻烦啦,所以我们换成django_mysql提供的JSONField吧。。
django_mysql.JSONField
django3.1新增了models.JSONField,还支持很多JSONField的orm查询方法
但我们是2.x的版本,故需要第三方库的支持
1、requirements.txt中加入
django-mysql==3.9.0
2、install一下
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn
3、使用
from django_mysql.models import JSONField ... config = JSONField("配置信息", default=dict) ...
这篇关于django2.x使用JSONField的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-16Vue3资料:新手入门必读教程
- 2024-11-16Vue3资料:新手入门全面指南
- 2024-11-16Vue资料:新手入门完全指南
- 2024-11-16Vue项目实战:新手入门指南
- 2024-11-16React Hooks之useEffect案例详解
- 2024-11-16useRef案例详解:React中的useRef使用教程
- 2024-11-16React Hooks之useState案例详解
- 2024-11-16Vue入门指南:从零开始搭建第一个Vue项目
- 2024-11-16Vue3学习:新手入门教程与实践指南
- 2024-11-16Vue3学习:从入门到初级实战教程