使用 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
我正在构建一个 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