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

求助:将sale.order的job_title_2字段同步至account.invoice

问题分析与解决方案

代码核心问题

  1. 类名与继承对象不匹配:继承sale.order的类被命名为SaleOrderLine,混淆了主表与行表的概念,应改为SaleOrder;同理继承account.invoice的类命名为InvoiceLine不合理,建议改为AccountInvoice。
  2. 计算字段未关联方法:job_title_2字段定义时未指定compute参数,导致@api.depends装饰的方法无法触发。
  3. 方法未归属目标类:get_order方法未嵌套在AccountInvoice类内部,完全无法作用于发票对象。

正确实现方式

方式一:计算字段实时同步(推荐,自动同步销售订单字段变化)

from odoo import models, fields, api

class SaleOrder(models.Model):
    _inherit = 'sale.order'

    job_title = fields.Char('Job Title')
    job_title_2 = fields.Char('Job Title 2')

class AccountInvoice(models.Model):
    _inherit = 'account.invoice'
    
    job_title = fields.Char('Job Title')
    job_title_2 = fields.Char('Job Title 2', compute='_compute_job_title_2', store=True)

    @api.depends('sale_order_id.job_title_2')
    def _compute_job_title_2(self):
        for invoice in self:
            invoice.job_title_2 = invoice.sale_order_id.job_title_2 if invoice.sale_order_id else False
  • 说明:
    • 将计算方法嵌套在AccountInvoice类内,通过compute参数绑定到job_title_2字段。
    • @api.depends指定依赖sale_order_id.job_title_2,销售订单的job_title_2变化时,发票字段会自动更新。
    • store=True将计算结果存储到数据库,提升查询性能。

方式二:创建发票时同步(仅在发票生成时复制一次)

如果不需要实时同步,仅在从销售订单生成发票时同步字段,可重写create方法:

from odoo import models, fields, api

class SaleOrder(models.Model):
    _inherit = 'sale.order'

    job_title = fields.Char('Job Title')
    job_title_2 = fields.Char('Job Title 2')

class AccountInvoice(models.Model):
    _inherit = 'account.invoice'
    
    job_title = fields.Char('Job Title')
    job_title_2 = fields.Char('Job Title 2')

    @api.model
    def create(self, vals):
        invoice = super(AccountInvoice, self).create(vals)
        if invoice.sale_order_id:
            invoice.write({
                'job_title': invoice.sale_order_id.job_title,
                'job_title_2': invoice.sale_order_id.job_title_2
            })
        return invoice

额外注意事项

  • 确保account.invoice的sale_order_id关联字段正常(Odoo标准模块已默认提供)。
  • 若需同步发票行(account.invoice.line)与销售订单行的字段,需调整继承对象为account.invoice.line,并依赖sale_line_id字段。

内容的提问来源于stack exchange,提问作者Alwaysstuck

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 14:40:45