python django restful框架_python-Django Rest框架和JSONField

python-Django Rest框架和JSONField

给定具有JSONField的Django模型,使用Django Rest Framework对其进行序列化和反序列化的正确方法是什么?

我已经尝试创建自定义partial=True并覆盖to_native和from_native:

from json_field.fields import JSONEncoder, JSONDecoder

from rest_framework import serializers

class JSONFieldSerializer(serializers.WritableField):

def to_native(self, obj):

return json.dumps(obj, cls = JSONEncoder)

def from_native(self, data):

return json.loads(data, cls = JSONDecoder)

但是,当我尝试使用partial=True更新模型时,JSONField对象中的所有浮点数都变为字符串。

11个解决方案

62 votes

如果您使用的是Django Rest Framework> = 3.3,那么现在将包括JSONField序列化程序。 现在这是正确的方法。

如果您使用的是Django Rest Framework <3.0,请参阅gzerone的答案。

如果您使用的是DRF 3.0-3.2,并且无法升级,也不需要序列化二进制数据,请按照以下说明进行操作。

首先声明一个字段类:

from rest_framework import serializers

class JSONSerializerField(serializers.Field):

""" Serializer for JSONField -- required to make field writable"""

def to_internal_value(self, data):

return data

def to_representation(self, value):

return value

然后像这样将字段添加到模型中

class MySerializer(serializers.ModelSerializer):

json_data = JSONSerializerField()

而且,如果您确实需要序列化二进制数据,则始终可以复制正式发布代码

Mark Chackerian answered 2020-02-03T08:47:39Z

18 votes

在2.4.x中:

from rest_framework import serializers # get from https://gist.github.com/rouge8/5445149

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值