You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Odoo14使用PIL生成图片赋值给Image字段出现TypeError问题咨询

问题根因

Odoo的fields.Image类型仅接收base64编码的图片字符串作为合法值,你直接将PIL生成的Image实例赋值给字段,Odoo内部处理字段值时尝试对非序列类型的Image对象做下标取值操作,就触发了该TypeError。

修复方案

你需要将PIL生成的图片先转成字节流,再编码为base64字符串后再赋值给plan字段,完整实现如下:

  1. 先在文件头部引入依赖包:
import base64
from io import BytesIO
from PIL import Image
  1. 修正create方法逻辑:
@api.model
def create(self, vals):
    if not vals.get('plan'):
        # 生成指定尺寸的红色图片
        img = Image.new('RGB', (640, 480), '#FF0000')
        # 将图片写入内存字节流
        buffer = BytesIO()
        img.save(buffer, format='PNG')
        # 编码为base64字符串赋值给字段
        vals['plan'] = base64.b64encode(buffer.getvalue()).decode('utf-8')
    return super(Halle, self).create(vals)
额外优化建议
  • 如果不需要动态生成图片,可以提前准备好默认红色图片,将它的base64编码直接硬编码到代码中,省去运行时生成图片的性能开销,也可以避免PIL依赖带来的环境问题。
  • 如果需要支持用户编辑时清空plan字段后也自动填充默认值,可参照create的逻辑重写write方法即可。

内容的提问来源于stack exchange,提问作者unnamed-dev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 23:42:03