先说结论
在 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
评论区