You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Odoo 8中根据sales_divisi_id控制按钮隐藏失效求助

Odoo 8按钮隐藏配置失效问题排查与解决

问题场景

在Odoo 8中需实现当sales_divisi_id为VET时隐藏「Approve Checker」按钮,但当前配置未生效,以下是现有代码:

现有代码

Python计算字段方法

@api.depends('product_id')
def get_sales_divisi(self):
    for line in self:
        if line.product_id.divisi_update:
            line.sales_divisi_id = line.product_id.divisi_update.id
        elif line.product_id.divisi_ids:
            line.sales_divisi_id = line.product_id.divisi_ids.ids[0]

XML按钮配置

<button name="action_approve" string="Approve Checker" type="object"  attrs="{'invisible':['|',('sales_divisi_id', '=', '2'),('sales_divisi_id', 'in', ('VET'))]}" groups="ts_addons_tbk.group_tbk_checker" />

解决建议

1. 字段匹配逻辑错误

sales_divisi_id是many2one字段,存储的是关联记录的ID,而非字符串名称:

  • 直接用VET匹配完全无效,要么用对应记录的ID(比如你写的2),要么通过字段的name属性匹配:
<!-- 按名称匹配的正确写法 -->
attrs="{'invisible':['|',('sales_divisi_id', '=', 2),('sales_divisi_id.name', '=', 'VET')]}"

2. 计算字段触发机制问题

Odoo 8中@api.depends的触发条件需精准:

  • 确保sales_divisi_id正确定义为计算字段,若需缓存值要加store=True:
sales_divisi_id = fields.Many2one('your.divisi.model', compute='get_sales_divisi', store=True)
  • 若divisi_update或divisi_ids是关联字段,需把依赖条件细化到子字段,避免计算逻辑不触发:
@api.depends('product_id.divisi_update', 'product_id.divisi_ids')

3. 视图与权限校验

  • 用开发者模式查看当前记录的sales_divisi_id实际值,确认计算逻辑是否正确赋值;
  • 刷新视图缓存(开发者模式点击「刷新视图」),或重启Odoo服务,确保XML修改生效;
  • 检查当前用户是否属于ts_addons_tbk.group_tbk_checker组,组权限可能覆盖attrs的隐藏规则。

4. 逻辑运算符冗余

当前XML用|(或逻辑)表示「ID为2 或 名称为VET时隐藏」,如果仅需VET时隐藏,直接简化条件:

attrs="{'invisible':[('sales_divisi_id.name', '=', 'VET')]}"

内容的提问来源于stack exchange,提问作者Nur Faiz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 23:50:33