如何通过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
相关产品推荐
相关产品推荐

