我在Odoo 9 PostgreSQL数据库的res_partner表中找不到image列?Odoo 9将此图像字段存储在哪里?
res_partner
image
vof42yt11#
从Odoo 9开始,许多binary字段已被修改为存储在ir.attachment模型(ir_attachment表)中。这样做是为了受益于文件系统存储(和重复数据删除属性)并避免数据库膨胀。这在带有attachment=True参数的二进制字段上启用,就像对res.partner的image字段所做的那样。激活时,二进制字段的get()和set()方法将存储和检索ir.attachment表中的值。如果查看代码,您将看到附件使用以下值来建立到原始记录的链接:
binary
ir.attachment
ir_attachment
attachment=True
res.partner
get()
set()
name
res_field
res_model
res_id
type
'binary'
datas
因此,如果您想检索res.partner的image记录,其中包含ID为32的image的值,则可以使用以下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实现附件重复删除的方式:具有相同文件的多个附件将Map到磁盘上的相同唯一文件。如果您想以编程方式修改image字段的值,强烈建议使用ORM API(例如write()方法),以避免产生不一致或必须手动重新实现文件存储系统。
store_fname
'ab/abcdef0123456789'
abc...
write()
参考文献
1条答案
按热度按时间vof42yt11#
从Odoo 9开始,许多
binary
字段已被修改为存储在ir.attachment
模型(ir_attachment
表)中。这样做是为了受益于文件系统存储(和重复数据删除属性)并避免数据库膨胀。这在带有
attachment=True
参数的二进制字段上启用,就像对res.partner
的image
字段所做的那样。激活时,二进制字段的
get()
和set()
方法将存储和检索ir.attachment
表中的值。如果查看代码,您将看到附件使用以下值来建立到原始记录的链接:name
:二进制字段的名称,例如image
res_field
:二进制字段的名称,例如image
res_model
:包含字段的模型,例如res.partner
res_id
:二进制字段所属记录的IDtype
:'binary'
datas
:包含二进制字段内容的虚拟字段,实际存储在磁盘上因此,如果您想检索
res.partner
的image
记录,其中包含ID为32的image
的值,则可以使用以下SQL:字符串
由于
ir_attachment
条目默认使用文件系统存储,因此store_fname
字段的实际值将给予您Odoo文件存储中图像文件的路径,格式为'ab/abcdef0123456789'
,其中abc...
值是文件的SHA-1哈希值。这就是Odoo实现附件重复删除的方式:具有相同文件的多个附件将Map到磁盘上的相同唯一文件。如果您想以编程方式修改
image
字段的值,强烈建议使用ORM API(例如write()
方法),以避免产生不一致或必须手动重新实现文件存储系统。参考文献
image
字段以使用它的9.0 commit。