如何在Odoo中从bank_account.py字段自动填充至account_account.py字段
Odoo实现创建日记账时自动填充名称与公司字段
要实现创建account.journal记录时,自动从自定义bank.account.account模型同步acc_number到name字段、同步company_id字段,可按以下步骤修改代码:
1. 调整AccountJournal模型关联字段
首先修改account_account.py中的AccountJournal类,将银行账户关联字段指向自定义的bank.account.account模型(若需保留原有res.partner.bank关联,可新增字段而非替换):
from odoo import models, fields, api class AccountJournal(models.Model): _inherit = "account.journal" name = fields.Char(string='Journal Name', required=True, tracking=True) # 替换原有bank_account_id关联为自定义模型 bank_account_id = fields.Many2one('bank.account.account', string="Bank Account", ondelete='restrict', copy=False, check_company=True, domain="[('company_id', '=', company_id)]", tracking=True) company_partner_id = fields.Many2one('res.partner', related='company_id.partner_id', string='Account Holder', readonly=True, store=False) company_id = fields.Many2one('res.company', string='Company', required=True, readonly=True, index=True, default=lambda self: self.env.company, help="Company related to this journal", tracking=True) bank_statements_source = fields.Selection(selection=_get_bank_statements_available_sources, string='Bank Feeds', default='undefined', help="Defines how the bank statements will be registered", tracking=True) bank_acc_number = fields.Char(related='bank_account_id.acc_number', readonly=False, tracking=True) bank_id = fields.Many2one('res.bank', related='bank_account_id.bank_id', readonly=False, tracking=True)
2. 添加自动填充逻辑
通过onchange事件实现前端选择银行账户时自动填充字段,同时重载create方法确保代码创建记录时也能同步:
@api.onchange('bank_account_id') def _onchange_bank_account_id(self): """前端选择银行账户时自动填充name和company_id""" if self.bank_account_id: self.name = self.bank_account_id.acc_number self.company_id = self.bank_account_id.company_id @api.model def create(self, vals): """代码创建记录时自动填充字段""" if vals.get('bank_account_id'): bank_account = self.env['bank.account.account'].browse(vals['bank_account_id']) vals['name'] = bank_account.acc_number vals['company_id'] = bank_account.company_id.id return super(AccountJournal, self).create(vals)
关键说明
- 调整
bank_account_id的domain,确保仅显示当前公司的银行账户,避免跨公司选择。 onchange事件负责前端交互时的实时填充,create方法覆盖代码创建场景,确保两种方式都能生效。- 若原业务依赖
res.partner.bank的关联,建议新增custom_bank_account_id字段关联bank.account.account,而非替换原有bank_account_id,避免破坏原有功能。
内容的提问来源于stack exchange,提问作者Alwaysstuck
相关产品推荐
相关产品推荐

