我在Odoo 9 PostgreSQL数据库的image
表中找不到res_partner
列? Odoo 9在哪里存储这个图像区域?
答案 0 :(得分:15)
从Odoo 9开始,许多binary
字段已被修改为存储在ir.attachment
模型(ir_attachment
表)中。这样做是为了从文件系统存储(和重复数据删除属性)中受益,并避免使数据库膨胀。
在attachment=True
参数的二进制字段上启用此功能,就像res.partner
's image
fields一样。
激活后,二进制字段的get()
和set()
方法将在ir.attachment
表中store and retrieve the value。如果您查看code,您会看到附件使用以下值来建立原始记录的链接:
name
:二进制字段的名称,例如image
res_field
:二进制字段的名称,例如image
res_model
:包含该字段的模型,例如res.partner
res_id
:二进制字段所属记录的ID type
:'binary'
datas
:包含二进制字段内容的虚拟字段,实际存储在磁盘上因此,如果您要检索包含ID为32的ir.attachment
image
值的res.partner
记录,则可以使用以下SQL:
SELECT id, store_fname FROM ir_attachment
WHERE res_model = 'res.partner' AND res_field = 'image' AND res_id = 32;
由于ir_attachment
条目默认使用文件系统存储,因此store_fname
字段的实际值将为您提供Odoo文件存储中图像文件的路径,格式为'ab/abcdef0123456789'
其中abc...
值是文件的SHA-1哈希值。这就是Odoo如何实现附件的重复数据删除:具有相同文件的多个附件将映射到磁盘上的同一个唯一文件。
如果您想以编程方式修改image
字段的值,强烈建议使用ORM API(例如write()
方法),以避免产生不一致或必须手动重新实现文件存储系统。
<强>参考强>
image
字段以使用它的9.0 commit。