如何在Django中序列化ImageField?
我正在尝试把我的一个模型进行序列化,这个模型里有一个ImageField
(图片字段)。但是内置的序列化工具似乎无法处理这个字段,所以我想自己写一个序列化工具。你能告诉我怎么把图片序列化,并且在Django中和默认的JSON序列化工具一起使用吗?
谢谢
5 个回答
2
你可以试试使用base64编码,这样可以把图片转换成一种格式,方便放进JSON里面使用。
6
你不能直接把这个对象保存成一个可传输的格式,因为它是一个图片。你需要保存它路径的字符串表示。
最简单的方法就是在你想要保存的时候,调用它的 str() 方法。
json.dumps(unicode(my_imagefield)) # py2
json.dumps(str(my_imagefield)) # py3
这样应该就可以了。
5
我写了一个简单的json编码器的扩展。它不是把图片转换成base64格式,而是返回图片的路径。下面是一个代码片段:
def encode_datetime(obj):
"""
Extended encoder function that helps to serialize dates and images
"""
if isinstance(obj, datetime.date):
try:
return obj.strftime('%Y-%m-%d')
except ValueError, e:
return ''
if isinstance(obj, ImageFieldFile):
try:
return obj.path
except ValueError, e:
return ''
raise TypeError(repr(obj) + " is not JSON serializable")