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

如何通过XMLRPC调用Odoo write方法修改account_invoice发票行?

报错原因

你通过XML-RPC调用Odoo account.invoice模型的write方法时参数顺序错误:Odoo模型的write方法要求第一个入参为需要修改的记录ID(或ID列表),第二个入参才是更新用的数据字典vals,你的代码中漏传了发票主记录ID参数,系统把你传入的vals识别为第一个ID参数,因此触发vals缺失的报错。

解决步骤
  • 补充待修改的发票主记录ID入参(注意不是发票行ID,你当前代码中函数的入参id为发票行ID,需额外补充对应发票的主ID)
  • 调整call方法的参数顺序,在write之后先传入发票主ID,再传入vals
修正后代码示例
def modifyInvoice(invoice_main_id, invoice_line_id):
    invoiceLines = [(1, invoice_line_id, {
    'account_id': 636, 
    'name': "iPod2", 
    'quantity': 155,                                                         
    'price_unit': 17, 
    'product_id': 1})]
    vals = {
            'invoice_line_ids' : invoiceLines,
    }
    # 调整参数顺序,write后先传发票主ID,再传vals
    Invoice = call(url, "object", "execute", DB, uid, PASS, 'account.invoice', 'write', invoice_main_id, vals)
    print('invoice ...', Invoice)

如果你的函数原入参id就是发票主ID,只需要调整invoice_line_ids元组中的ID为对应要修改的发票行ID,同时把该id参数放到write和vals中间即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 18:54:05