我在我的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)
答案 0 :(得分:0)
序列化程序允许将复杂数据(如查询集和模型实例)转换为本机Python数据类型,然后可以轻松地将其呈现为JSON,XML或其他内容类型。
了解详情您需要的是:
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类型,而不是在序列化器中使用。