首页 文章

Django - 在DRF中反序列化JSONField

提问于
浏览
2

我在模型中有一个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获取数据时,它返回 xstr ,即

{
    'id': 1,
    'x': "{\"key\": \"value\"}"
}

如何正确地将数据反序列化回json?

1 回答

  • 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
    

    反过来,您将在_1260509中使用此字段:

    class ABCSerializer(serializers.ModelSerializer):
        x = JSONSerializerField()
    
        class Meta:
            model = ABC
            fields = ('x', )
    

    这应该可以解决你的问题:)

相关问题