python教程—Django Rest框架和JSONField-Python实用宝典

python教程—Django Rest框架和JSONField

给定一个带有JSONField的Django模型,使用Django Rest框架序列化和反序列化它的正确方法是什么?

给定一个具有JSONField的Django模型,使用Django Rest Framework序列化和反序列化它的正确方法是什么?

我已经尝试了定制序列化器。WritableField和覆盖to_native和from_native:

    from json_field.fields import JSONEncoder, JSONDecoder from rest_framework import serializers class JSONFieldSerializer(serializers.WritableField): def to_native(self, obj): return json.dumps(obj, cls = JSONEncoder) def from_native(self, data): return json.loads(data, cls = JSONDecoder)

但是当我尝试使用partial=True更新模型时,JSONField对象中的所有浮点数都变成了字符串。

回答

如果您正在使用Django Rest框架>= 3.3,那么JSONField序列化器是。这是正确的方法。

如果您使用Django Rest框架<3.0,然后看看gzerone的答案。

如果您正在使用DRF 3.0 - 3.2,并且无法升级,也不需要序列化二进制数据,那么请遵循以下说明。

首先声明一个字段类:

    from rest_framework import serializers 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

然后像这样在模型中添加字段

    class MySerializer(serializers.ModelSerializer): json_data = JSONSerializerField()

而且,如果您确实需要序列化二进制数据,则始终可以复制官方发布代码

​Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典

本文由 Python实用宝典 作者:Python实用宝典 发表,其版权均为 Python实用宝典 所有,文章内容系作者个人观点,不代表 Python实用宝典 对观点赞同或支持。如需转载,请注明文章来源。
1

发表评论