如何在Account Payment弹窗表单的Account Journal下拉框隐藏部分选项?
解决Account Journal下拉框过滤不生效的问题
你的代码直接重写journal_id字段的domain没生效,核心原因是Odoo原生的account.payment模型会通过动态逻辑生成journal_id的筛选条件(比如根据付款类型、当前公司等动态调整),静态设置的domain会被覆盖。
推荐通过重写Odoo原生的_get_journal_domain方法来实现过滤,这是官方设计的用于自定义journal筛选逻辑的入口:
from odoo import models class AccountPayment(models.Model): _inherit = "account.payment" def _get_journal_domain(self): # 先获取原生的domain条件 domain = super()._get_journal_domain() # 添加你需要的名称过滤条件,合并原有规则 domain += [('name', 'in', ('Cash','Insurance','Bank', 'UPI Payment'))] return domain
额外注意事项
- 如果系统启用了多语言,直接用
name过滤可能因翻译失效,建议改用journal的xml_id或数据库ID来筛选,示例:def _get_journal_domain(self): domain = super()._get_journal_domain() # 通过xml_id获取指定journal的ID allowed_journal_ids = [ self.env.ref('account.journal_cash').id, self.env.ref('your_module.journal_insurance').id, self.env.ref('account.journal_bank').id, self.env.ref('your_module.journal_upi_payment').id ] domain += [('id', 'in', allowed_journal_ids)] return domain - 确保你的模块依赖
account模块,在__manifest__.py中添加'depends': ['account']。
内容的提问来源于stack exchange,提问作者art
相关产品推荐
相关产品推荐

