Django Rest Framework和JSONField

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

我已经尝试过创建一个自定义serializers.WritableField和覆盖to_nativefrom_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对象中的所有浮点数都变为字符串。

回答:

如果你使用的是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()

以上是 Django Rest Framework和JSONField 的全部内容, 来源链接: utcz.com/qa/433119.html

回到顶部