如何在Odoo中实现字段隐藏?选择Banque时隐藏指定字段
Odoo中根据journal_id选择隐藏字段的实现方法
方法一:通过视图的attrs属性实现(前端控制)
这是最直接的方式,无需修改模型代码,直接在XML视图中配置字段的显隐规则:
场景1:按journal的名称匹配「Banque」
如果要隐藏单个字段,给目标字段添加attrs属性:
<field name="需要隐藏的字段名" attrs="{'invisible': [('journal_id.name', '=', 'Banque')]}"/>
如果要批量隐藏多个字段,可以把这些字段放在同一个group里,给group加attrs:
<group attrs="{'invisible': [('journal_id.name', '=', 'Banque')]}"> <field name="字段1"/> <field name="字段2"/> <!-- 其他需要隐藏的字段 --> </group>
场景2:按journal的类型匹配(Banque通常对应bank类型)
如果你的「Banque」实际上是银行类型的日记账,更推荐按类型判断(避免名称变更导致规则失效):
<field name="需要隐藏的字段名" attrs="{'invisible': [('journal_id.type', '=', 'bank')]}"/>
如果视图无法直接访问journal_id.type,可以在account.payment模型中添加关联字段:
from odoo import models, fields class AccountPayment(models.Model): _inherit = 'account.payment' journal_type = fields.Selection(related='journal_id.type', string='日记账类型', store=False)
之后视图中就可以用('journal_type', '=', 'bank')作为判断条件。
方法二:通过模型的onchange方法实现(后端控制)
如果需要更复杂的判断逻辑(比如结合其他字段),可以在模型中编写onchange方法:
from odoo import models, api class AccountPayment(models.Model): _inherit = 'account.payment' @api.onchange('journal_id') def _onchange_journal_id_hide_fields(self): # 初始化显隐状态 invisible = {'字段1': False, '字段2': False} if self.journal_id and self.journal_id.name == 'Banque': # 选中Banque时隐藏指定字段 invisible = {'字段1': True, '字段2': True} return {'invisible': invisible}
这种方式的优势是可以灵活加入更多判断条件,比如结合payment_type等其他字段一起控制显隐。
内容的提问来源于stack exchange,提问作者djouher
相关产品推荐
相关产品推荐

