Odoo14社区版如何将image_1920等图片字节字段转换为Base64字符串?
解决Odoo14社区版image_1920字段转Base64字符串问题
核心原因:Odoo的Binary类型字段(包括image_1920)本身存储的就是经过Base64编码的字节流(bytes类型),你之前调用base64.b64encode(record.image_1920)属于重复编码,无法得到正确结果。
常规场景转普通Base64字符串
直接对字段值做UTF-8解码即可,注意先做非空判断避免异常:
if record.image_1920: base64_str = record.image_1920.decode('utf-8') else: base64_str = ''
生成前端可用的图片Data URI
如果需要将字符串直接用于img标签的src属性,补充对应图片类型前缀即可:
if record.image_1920: # 可根据实际图片类型调整前缀中的image/png为image/jpeg等 base64_str = f"data:image/png;base64,{record.image_1920.decode('utf-8')}" else: base64_str = ''
从ir_attachment记录获取的场景
如果图片关联存储在ir_attachment中,先取对应attachment记录的datas字段再解码即可:
attachment = record.env['ir.attachment'].search([ ('res_id', '=', record.id), ('res_model', '=', record._name), ('type', '=', 'binary') ], limit=1) if attachment and attachment.datas: base64_str = attachment.datas.decode('utf-8')
注意事项
- 所有解码操作前必须做非空判断,避免空值调用decode方法抛出异常
- 若解码出现编码错误,可尝试添加
errors='ignore'参数过滤异常字符,例如record.image_1920.decode('utf-8', errors='ignore')
内容的提问来源于stack exchange,提问作者Maicoly Morocho
相关产品推荐
相关产品推荐

