Django - 在DRF中反序列化JSONField

时间:2017-11-10 08:58:16

标签: python django django-rest-framework

我在模型中有一个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?

1 个答案:

答案 0 :(得分:2)

您可以覆盖新序列化程序字段中的to_internal_valueto_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', )

这可以解决你的问题:)