使用 python 图片库 PIL 创建简单图片时 Odoo 14 出错

Odoo 14 Error when creating simple image with python image library PIL

我正在构建一个 odoo14 模块。该模型有一个图像,如果用户没有 select 我想生成一个红色图像并将其设置为该图像。这是我目前的做法:

@api.model
def create(self, vals):
    if not vals.get('plan'):
        img = Image.new('RGB', (640, 480), '#FF0000')
        vals['plan'] = img
    res = super(Halle, self).create(vals)
    return res

图像 属性 看起来像这样

plan = fields.Image(string="Plan")

不幸的是,我收到以下错误

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/odoo/http.py", line 640, in _handle_exception
    return super(JsonRequest, self)._handle_exception(exception)
  File "/usr/lib/python3/dist-packages/odoo/http.py", line 316, in _handle_exception
    raise exception.with_traceback(None) from new_cause
TypeError: 'Image' object is not subscriptable

如果您知道此问题的解决方案或变通方法,将不胜感激。非常感谢。

您需要提供文件内容的 base64 字符串表示形式。您可以查看 test_website_sale_image.py 文件中的示例。

试试下面的代码:

@api.model
def create(self, vals):
    if not vals.get('plan'):
        f = io.BytesIO()
        Image.new('RGB', (640, 480), '#FF0000').save(f, 'JPEG')
        f.seek(0)
        vals['plan'] = base64.b64encode(f.read())
    res = super(SaleOrder, self).create(vals)
    return res