覆盖JsonField Django REST框架

时间:2018-02-22 15:15:07

标签: json django dictionary django-rest-framework

我在我的serilizer中使用了JSONfield,并且线程store json as dict中的用户指出,DRF with Mysql将JSONfield存储为dict

但我宁愿将其存储为JSON {“tags”:{“data”:“test”}}而不是将其存储为Dict的默认行为 - {'tags':{'data':'test' - 丹尼尔建议使用JSONfield作为:

class JSONField(serializers.Field):
 def to_representation(self, obj):
  return json.loads(obj)
......

但是数据仍然存储为dict。 在我的 serializers.py 中 我已经重写了JSONField类,然后将其用作

class schemaserializer(serializers.ModelSerializer):
   js_data=serializers.JSONField()

然而它仍然像dict一样保存它。 预期行为: 将其另存为JSON - POST

将其检索为dict - GET(以便渲染可以将其解析为JSON)

我目前正在使用json转储和json加载手动执行此操作,但寻找更好的方法。

这样做的原因是因为虽然我有一个API,但是有些用户直接读取我的数据库并且他们需要该字段是JSON。

Django(2.0.1) Python 3.5 djangorestframework(3.7.7)

2 个答案:

答案 0 :(得分:0)

序列化程序允许将复杂数据(如查询集和模型实例)转换为本机Python数据类型,然后可以轻松地将其呈现为JSON,XML或其他内容类型。

serializers docs

了解详情

您需要的是:

class SchemaSerializer(serializers.ModelSerializer):
    class Meta:
        model = YOUR_MODEL_NAME
        fields = A_LIST_OF_FIELD

然后在你看来:

class SchemaView(mixins.ListModelMixin, generic.GenericAPIView):
    queryset = YOUR_MODEL_NAME.objects.all()
    serializer_class = SchemaSerializer

答案 1 :(得分:0)

你的意思是你想在数据库后端使用实际的JSON类型吗?如果是这样,您可能希望在模型上使用适当的JSONfield类型,而不是在序列化器中使用。