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

Odoo XML中one2many字段内嵌tree视图列无法通过上下文隐藏问题咨询

问题根因

你之前的方案不生效是两个核心原因导致的:

  1. attrs属性的域规则仅能使用当前子模型(product.pricelist.item)的字段,你传入的product_variants_without是父模型product.template的字段,子模型不存在该字段,所以规则永远不会触发。
  2. 列的invisible属性拿不到上下文值,通常是因为你没有在父表单视图中预先声明product_variants_without字段,导致上下文传递时该值为未定义状态。

解决方案

步骤1:父视图预先声明传递字段

在product.template的表单视图中,先把要传递的product_variants_without字段加入视图(设为隐藏即可,无需展示):

<field name="product_variants_without" invisible="1"/>

必须加这一步,否则Odoo视图渲染时不会读取该字段的值,上下文传递的参数永远为空。

步骤2:修正内嵌tree视图的列配置

删除列上attrs中的无效invisible规则,仅保留列级的invisible属性即可实现整列隐藏:

<field name="product_pricelist_item_ids" widget="one2many"  context="{'product_variants_without': product_variants_without}">
    <tree string="Descuentos" editable="bottom" multi_edit="1" >
        <field name="product_id"
          groups="product.group_product_variant"
          invisible="context.get('product_variants_without', False)"
          readonly="context.get('active_model')=='product.product'"
          attrs="{'required': [('applied_on', '=', '0_product_variant')]}"
          domain="['|', '|',
            ('id', '=', context.get('default_product_id', 0)),
            ('product_tmpl_id', '=', parent.id),
            ('categ_id', '=', context.get('default_categ_id', 0)), '|', ('company_id', '=', company_id), ('company_id', '=', False)
          ]"
          options="{'no_create_edit':1, 'no_open': 1, 'no_create': True}"
          />
    </tree>
</field>

额外说明

如果需要同时控制单列中某几行的字段显隐,你可以给product.pricelist.item加一个相关字段关联父级的product_variants_without值,再在attrs中使用该相关字段做规则判断即可。

内容的提问来源于stack exchange,提问作者Maicoly Morocho

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 07:27:04