Django Rest Framework和JSONField
给定具有JSONField的Django模型,使用Django Rest Framework
对其进行序列化和反序列化的正确方法是什么?
我已经尝试过创建一个自定义serializers.WritableField
和覆盖to_native
和from_native
:
from json_field.fields import JSONEncoder, JSONDecoderfrom 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 serializersclass 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