ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

django2.x使用JSONField

2022-07-10 04:31:20  阅读:250  来源: 互联网

标签:JSONField mysql django2 json 使用 序列化 data serializer


参考:
Django ORM中原生JSONField的使用方法
Django3.x和2.x JSONFiled使用

前言

使用JSONField在反序列化的时候有问题,jsonfield.JSONField会报错"不是有效的字符串",rest_framework.fields.JSONField会忽略json字段导致序列化了个寂寞。

jsonfield.JSONFieldJSONField在数据库中存储都一样,都是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了。

image

当然也有解决办法,重写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)
    ...

标签:JSONField,mysql,django2,json,使用,序列化,data,serializer
来源: https://www.cnblogs.com/libaiyun/p/16462468.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有