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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 02:16:29