我在模型中有一个JSONField,让我们说x
。我正在使用DRF来保存模型实例。
串行: -
class ABCSerializer(serializers.ModelSerializer):
class Meta:
model = ABC
fields = ('x', )
def create(self, data):
instance = ABC.objects.create(**data)
instance.x = {'key': 'value'}
instance.save()
当我发布数据时,通过创建对象返回的响应被正确反序列化,即
{
'id': 1,
'x': {
'key': 'value'
}
}
但是,当我使用ID获取数据时,它会将x
作为str
返回,即
{
'id': 1,
'x': "{\"key\": \"value\"}"
}
如何正确地将数据反序列化回json?
答案 0 :(得分:2)
您可以覆盖新序列化程序字段中的to_internal_value
和to_representation
来处理JSON字段的返回数据。
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
反过来,您可以在ABCSerializer
:
class ABCSerializer(serializers.ModelSerializer):
x = JSONSerializerField()
class Meta:
model = ABC
fields = ('x', )
这可以解决你的问题:)