如何在Django中序列化ImageField?

4 投票
5 回答
21168 浏览
提问于 2025-04-17 02:45

我正在尝试把我的一个模型进行序列化,这个模型里有一个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")

撰写回答