如何切换company_id时隐藏bank_from_journal_id的关联记录
Odoo实现company_id切换时过滤匹配的银行日记账记录
方法1:字段定义绑定动态Domain
直接在bank_from_journal_id的字段定义中,将域与当前记录的company_id关联,Odoo会自动根据company_id的变化刷新下拉选项。
代码示例:
from odoo import models, fields class YourCustomModel(models.Model): _name = 'your.custom.model' _description = 'Custom Model' company_id = fields.Many2one('res.company', string='Company', default=lambda self: self.env.company) bank_from_journal_id = fields.Many2one( 'account.journal', string='Bank/Cash Journal', domain=lambda self: [ ('type', 'in', ['bank', 'cash']), ('company_id', '=', self.company_id.id) ] )
方法2:onchange方法手动控制域(更灵活)
如果需要添加额外逻辑(比如清空原有选择),可以通过onchange方法响应company_id的变化,动态更新域。
代码示例:
from odoo import models, fields, api class YourCustomModel(models.Model): _name = 'your.custom.model' _description = 'Custom Model' company_id = fields.Many2one('res.company', string='Company', default=lambda self: self.env.company) bank_from_journal_id = fields.Many2one( 'account.journal', string='Bank/Cash Journal', domain=[('type', 'in', ['bank', 'cash'])] ) @api.onchange('company_id') def _onchange_company_id(self): if self.company_id: # 清空原有选择,避免无效记录 self.bank_from_journal_id = False return { 'domain': { 'bank_from_journal_id': [ ('type', 'in', ['bank', 'cash']), ('company_id', '=', self.company_id.id) ] } } else: self.bank_from_journal_id = False return { 'domain': { 'bank_from_journal_id': [('type', 'in', ['bank', 'cash'])] } }
视图层补充设置(可选)
如果上述代码在特定视图中不生效,可直接在XML视图的字段标签中绑定动态域:
<field name="company_id"/> <field name="bank_from_journal_id" domain="[('type', 'in', ['bank', 'cash']), ('company_id', '=', company_id)]"/>
内容的提问来源于stack exchange,提问作者Denny
相关产品推荐
相关产品推荐

