文件存储

Odoo 文件到底存哪了:Binary、Image 和 ir.attachment 的关系讲透

很多开发会用 Binary 和 Image 字段,但常常没真正理解文件内容、附件记录和业务对象之间是什么关系。本文把这条链理清。

Odoo 开发
进阶 开发者 1 分钟阅读
0 评论 0 点赞 0 收藏 6 阅读

先说结论

在 Odoo 里,文件相关能力并不是“字段里塞一段二进制”这么简单。

很多场景里真正涉及的是几层关系:

  • 业务对象字段(Binary / Image
  • 附件记录 ir.attachment
  • 最终文件内容的存储方式

所以当你问“这个文件到底存哪了”,往往不能只盯一个字段看。


为什么这个问题经常让人迷糊

因为页面上看起来只是:

  • 上传一个文件
  • 上传一张图片
  • 在表单里显示出来

所以很容易误以为:

  • 文件内容就直接老老实实躺在当前模型这一列里

但在 Odoo 里,很多文件能力实际上会和附件机制深度关联。

也就是说,页面上的“文件字段体验”和底层真正的附件存储,并不一定是一层东西。


BinaryImage 字段更像什么

它们更像:

业务对象暴露给用户的文件入口。

也就是说,用户是通过这些字段和文件交互。

但“入口”不等于“最终存储模型”。

尤其当系统要支持:

  • 文件复用
  • 下载
  • 预览
  • 访问控制
  • 附件列表

时,ir.attachment 往往就会进入这条链。


ir.attachment 真正扮演什么角色

最通俗的理解是:

系统级附件登记与承载层。

它更像附件世界里的统一对象。

很多时候它会负责:

  • 记录这是哪个业务对象的附件
  • 记录文件名、类型等元信息
  • 挂接真实文件内容
  • 让附件能被统一管理和访问

所以 ir.attachment 不是“可有可无的旁支”,而是很多文件能力真正的中枢。


为什么“字段里有图”和“附件里有文件”不是同一视角

因为它们面对的对象不同:

  • 字段视角关注:这个业务对象要不要展示/编辑这份内容
  • 附件视角关注:系统如何统一登记、关联和管理文件资产

这也是为什么同一个文件问题,有时你从字段能看到,有时你更应该去查附件记录。


为什么文件问题常常不只是“能不能上传”

因为后面还会牵扯很多边界:

  • 权限谁能看
  • 文件跟哪个对象绑
  • 删记录后附件怎么处理
  • 图片缩略图怎么来
  • 业务字段和附件记录是否同步

所以文件机制不是小功能,它往往涉及对象关系、权限和存储策略三层一起看。


实战里最容易踩的 5 个坑

1. 以为文件内容只在业务字段里

排查路径会错。

2. 只改字段,不理解附件层

后面下载/预览/权限会出怪问题。

3. 把图片字段和通用附件机制完全分开理解

容易漏掉真实关联。

4. 删除业务对象时没考虑附件收尾

会留下脏附件或误删文件。

5. 只看前端上传是否成功,不看底层附件记录是否正确

这种问题最容易埋雷。


一句话记忆法

把它记成一句话:

Binary / Image 字段更像业务入口,ir.attachment 更像系统级附件承载层,所以文件到底“存哪”往往要同时看字段、附件记录和底层存储链。

理解这一句,Odoo 文件机制就没那么雾里看花了。

DISCUSSION

评论区

想参与讨论?先 登录 再发表评论。
还没有评论,你可以成为第一个留言的人。