给定一个 Django 模型JSON字段,使用序列化和反序列化它的正确方法是什么Django 休息框架?
我已经尝试过创建自定义serializers.WritableField
并压倒一切to_native
and 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 Framework >= 3.3,则 JSONField 序列化程序为现在包括在内。现在这是正确的方法。
如果您使用的是 Django Rest Framework
如果您使用的是 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()
而且,如果您确实需要序列化二进制数据,您始终可以复制官方发布代码
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)