Odoo 17 如何基于自定义字段条件隐藏父视图中的Tax ID字段
Odoo 17 如何基于自定义字段条件隐藏父视图中的Tax ID字段
嗨,我来帮你搞定这个需求!你已经成功给res.partner模型扩展了is_farmer布尔字段,接下来只需要在视图继承中针对Tax ID对应的字段添加条件隐藏规则就可以了。
首先确认你的模型扩展代码是没问题的(可以稍微完善下,加上字段描述更清晰):
from odoo import models, fields class ResPartner(models.Model): _inherit = 'res.partner' is_farmer = fields.Boolean(string="Is Farmer", help="标记该合作伙伴是否为农户")
接下来就是关键的视图修改部分,你提到的position="attributes"语法完全正确,我们只需要定位到Tax ID对应的vat字段(Odoo里Tax ID默认绑定的是vat字段),然后给它添加attrs属性来实现条件隐藏:
<record id="view_res_partner_form_inherit" model="ir.ui.view"> <field name="name">res.partner.form.inherit</field> <field name="model">res.partner</field> <field name="inherit_id" ref="base.view_partner_form"/> <field name="arch" type="xml"> <!-- 定位到Tax ID对应的vat字段,修改它的属性 --> <field name="vat" position="attributes"> <!-- 设置条件:当is_farmer为True时,隐藏该字段 --> <attribute name="attrs">{'invisible': [('is_farmer', '=', True)]}</attribute> </field> </field> </record>
简单解释下这段代码:
- 我们通过
position="attributes"来修改原有vat字段的属性 attrs里的invisible规则定义了隐藏条件:当is_farmer字段的值为True时,Tax ID字段就会自动隐藏- 如果你需要反过来(当is_farmer为False时隐藏),只需要把条件改成
('is_farmer', '=', False)就行
最后别忘了升级你的自定义模块,这样修改才会生效哦!
备注:内容来源于stack exchange,提问作者MarkNS
相关产品推荐
相关产品推荐

