django-rest-framework的JSONField字段,数据库字段保存json对象方案

本文介绍了在Django Rest Framework中使用JSONField时遇到的问题,即JSON数据保存到数据库后格式不正确,导致前端无法解析。解决方案是校验并保存前端传来的原始JSON数据,序列化时将数据库读出的数据转换为Python可序列化的json格式。通过修改序列化器,确保数据在传递时保持json格式,避免转义和单引号问题。
摘要由CSDN通过智能技术生成

有个业务场景,数据库一个字段保存json数据,访问时返回该json。

这里使用modle字段为 

name = models.CharField(max_length=120)

序列化器

name = serializers.JSONField()

但是DRF 框架的JSONField 字段 返回的是符串,并且保存到数据库中的数据的转成了python的数据格式,如字典的键是用单引号引出,但是json是用双引号引出,单引号引出的不是json格式,无论前端还是后端解释都是解释不出来的。所以在这里我们需要改写下JSONField 这个字段。

class Jsonserializer(serializers.JSONField):
    default_error_messages = {
        'invalid_json': _('无效的json数据格式')
    }
    def to_representation(self, value):
        return json.loads(value)

    def to_internal_value(self, data):
        try:
            json.loads(data)
        except (TypeError, ValueError):
            self.fail('invalid_json')
        return data

这里我们 将前端传来的数据 校验后(json.loads(data)ÿ

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值