计算字段搜索

Odoo 计算字段为什么有时搜不到:compute 字段、search 方法和可搜索边界讲透

很多计算字段显示没问题,但一搜就不对。问题通常不在界面,而在“这个字段到底怎么让搜索系统理解”。本文把可搜索边界讲清楚。

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

先说结论

很多 Odoo 开发都会遇到这种情况:

  • 计算字段显示是对的
  • 但搜索、筛选、domain 却怎么都不对

这往往不是前端问题,而是你没先想清楚:

这个字段的值,系统到底应该怎么拿来参与搜索。

所以“会显示”和“可搜索”是两件事。


为什么这类问题特别容易误判

因为用户视角会觉得很自然:

  • 页面都已经显示出来了
  • 系统为什么不能直接拿它搜?

但 ORM 视角并不是这么简单。

一个字段能不能被搜索,取决于很多因素:

  • 它是不是存储字段
  • 它的值有没有真实持久化
  • 如果没存,搜索系统要怎么把“搜索这个字段”翻译成别的条件

所以显示层和搜索层,常常不是同一条路。


为什么非存储 compute 字段最容易出这个问题

因为它的值很多时候只是:

  • 在读取时算出来

而不是:

  • 数据库里本来就有一列现成值等你过滤

这意味着搜索系统如果想支持它,就得知道:

  • 当用户搜这个计算字段时,应该改写成什么真实条件

否则就会出现“看得见,但搜不准”。


它更像:

把“用户想按这个计算字段搜索”翻译成系统真正能执行的 domain。

所以它不是给字段“加点功能”,而是在补一层语义桥接。

特别是对那些:

  • 逻辑值
  • 状态组合值
  • 由多个字段推导出的结果

它就很有价值。


因为它们都和“能不能搜”有关,但不是同一路子。

你可以先粗暴理解成:

  • store=True:把结果存下来,搜索更像普通字段
  • search=:不一定存,但要告诉系统怎么把搜索意图翻译出去

所以一个更偏持久化路径,一个更偏语义翻译路径。


为什么很多字段并不是“显示正确就够了”

因为用户真正操作系统时,除了看,还要:

  • 搜索
  • 筛选
  • 分组
  • 设 domain

如果一个字段只会显示,不能稳定参与这些动作,那它在业务上就还是“半成品”。

这也是为什么计算字段设计时,最好不要只想页面显示效果。


实战里最容易踩的 5 个坑

1. 以为显示出来就天然可搜索

这是最常见误区之一。

结果一筛选就怪。

设计思路会乱。

4. 字段业务上很关键,却只做成展示层结果

后续搜索和 domain 都不好用。

5. 只从表单视角设计字段,不从查询视角设计字段

系统体验会断层。


一句话记忆法

把它记成一句话:

计算字段“能显示”不等于“能搜索”;要么把结果存下来,要么明确告诉 Odoo:当用户搜这个字段时,应该翻译成什么真实条件。

理解这一句,计算字段搜索问题就会清楚很多。

DISCUSSION

评论区

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