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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 21:30:31