归档机制

Odoo 归档为什么总像数据“消失了”:active、archive 和 active_test 到底怎么影响搜索

很多“记录找不到了”的问题,其实不是删了,而是被归档和 active_test 过滤掉了。本文把 Odoo 的归档语义和搜索影响讲清楚。

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

先说结论

在 Odoo 里,很多记录“看不见了”,并不等于被删除了。

更常见的真实原因是:

  • 记录被归档了
  • 搜索默认只看活跃记录
  • active_test 上下文把非活跃记录过滤掉了

所以归档机制讨论的不是“删没删”,而是:

这条记录还在系统里,但默认要不要继续出现在常规工作视野中。


为什么归档比删除更常见

因为很多业务记录并不适合物理删除。

它们可能仍然需要:

  • 保留历史
  • 支持追溯
  • 参与旧单据引用
  • 让报表和审计还能讲得通

这时“归档”就比“删除”稳得多。

也就是说,归档真正解决的是:

  • 退出日常使用

而不是:

  • 从系统里彻底消失

active 字段在这里扮演什么角色

最常见的归档机制就是围绕 active 展开。

它的语义很直接:

  • active = True → 正常活跃
  • active = False → 已归档/非活跃

所以很多模型的“Archive”本质上就是把 active 关掉。


为什么用户经常觉得“数据没了”

因为默认搜索、Many2one 候选、列表页面等很多地方,通常都会只展示活跃记录。

于是用户看到的体验就是:

  • 之前还在
  • 现在搜不到
  • 好像消失了

但底层记录其实还在。

这时根因往往不是数据损坏,而是搜索上下文和默认过滤行为变了。


active_test 真正控制的是什么

它最适合理解成:

搜索时要不要自动把非活跃记录排除掉。

默认情况下,很多查询场景会启用它,于是归档记录自然就不再出现在常规结果里。

而当某些业务场景需要“连归档记录也一起看”时,就得显式调整这个上下文。

所以 active_test 不只是一个小参数,它直接改变了“搜索世界观”。


为什么归档问题常常不是单页问题

因为它不只影响列表页。

它还可能影响:

  • 关系字段候选
  • 搜索结果
  • 某些统计
  • 某些自动化逻辑看到的数据范围

这就是为什么有时你会遇到:

  • 页面上看不到
  • 但后台或特定代码里还能找到

不是系统矛盾,而是上下文边界不同。


实战里最容易踩的 5 个坑

1. 以为记录没了,其实只是被归档

判断方向会完全跑偏。

2. 明明业务要看归档记录,却忘了 active_test

结果一直查不到。

3. 把归档和删除混成一回事

会误伤数据边界设计。

4. 只在界面上排查,不看搜索上下文

很难快速定位。

5. 关系字段候选受 active 影响,却没意识到

用户会觉得“这个对象为什么选不到”。


一句话记忆法

把它记成一句话:

归档通常只是把 active 关掉,而 active_test 决定搜索时要不要自动忽略这些非活跃记录,所以很多“数据消失”其实只是默认视图把它们藏起来了。

理解这一句,Odoo 归档问题就不容易再误判成删库。

DISCUSSION

评论区

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