Odoo XML中one2many字段内嵌tree视图列无法通过上下文隐藏问题咨询
问题根因
你之前的方案不生效是两个核心原因导致的:
attrs属性的域规则仅能使用当前子模型(product.pricelist.item)的字段,你传入的product_variants_without是父模型product.template的字段,子模型不存在该字段,所以规则永远不会触发。- 列的
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
相关产品推荐
相关产品推荐

