Odoo18通过XML-RPC创建Helpdesk日志笔记遇TypeError问题求助
Odoo 18 XML-RPC调用message_post报错TypeError的解决方法
问题描述
调用Odoo 18 Helpdesk模块的message_post方法创建日志笔记时,触发如下错误:
TypeError: MailThread.message_post takes 1 positional argument but 3 were given.
核心疑问:不清楚如何正确传入Helpdesk工单的记录ID及参数。
错误代码片段
# 错误的message_post调用 doc_id = models18.execute_kw(db18, uid18, password18, 'helpdesk.ticket', 'message_post', [[helpdesk[0]], description_html, {}]) # 尝试过的错误写法 doc_id = models18.execute_kw(db18, uid18, password18, 'helpdesk.ticket', 'message_post', [helpdesk[0]],[description_html])
错误原因
- execute_kw参数结构错误:
execute_kw的第6个参数是目标方法的完整参数列表,必须将message_post的所有参数放在同一个列表内,不能拆分传递。 - message_post参数传递错误:
message_post是Odoo模型的方法,第一个参数是记录集(对应XML-RPC中的ID列表),后续参数需要以**关键字参数(字典形式)**传递,而非位置参数。
正确解决方案
调整message_post的调用方式,将记录ID列表作为第一个参数,日志内容等参数放在字典中传递:
# 正确的message_post调用 try: doc_id = models18.execute_kw( db18, uid18, password18, 'helpdesk.ticket', 'message_post', [[helpdesk[0]], # 记录ID列表,对应方法的self参数 {'body': description_html, # 日志内容 'message_type': 'comment', # 消息类型:comment为内部笔记,email为公开消息 'subtype_xmlid': 'mail.mt_comment'}] # 消息子类型,对应内部评论 ) print(f"Record updated with ID: {doc_id}") except Exception as e: print(f"Error creating record: {e}")
关键说明
- 记录ID必须以列表形式传递(即使是单个ID),因为Odoo的方法默认处理记录集。
body参数接收HTML格式的内容,正好匹配从JSON读取的description_html。message_type和subtype_xmlid控制日志的显示类型,可根据需求调整。
内容的提问来源于stack exchange,提问作者Gautam Bothra
相关产品推荐
相关产品推荐

