给定具有JSONField的Django模型,使用Django Rest Framework对其进行序列化和反序列化的正确方法是什么?
Django Rest Framework
我已经尝试过创建一个自定义serializers.WritableField和覆盖to_native和from_native:
serializers.WritableField
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对象中的所有浮点数都变为字符串。
partial=True
如果你使用的是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()