Odoo16通过XMLRPC更新website_description翻译报错:'str'无'get'属性
Odoo16 XMLRPC批量更新website_description字段翻译报错解决方法
问题原因
website_description属于Odoo的HTML富文本字段,其翻译处理逻辑与普通字符字段不同。XMLRPC接口更新该字段翻译时,Odoo期望接收一个包含value键的字典结构,而非直接传入纯字符串,直接传字符串会导致Odoo内部调用get方法时触发AttributeError。
解决步骤
1. 调整字段值的传递格式
针对website_description字段,将读取到的HTML字符串包装为{'value': 你的HTML内容}的字典格式;普通字符字段(如产品名称)仍保持直接传字符串的方式。
2. 修改核心代码示例
假设你的update_translation函数中处理字段值的部分,修改如下:
# 读取HTML文件内容 with open('your_product_desc.html', 'r', encoding='utf-8') as f: html_content = f.read() # 根据字段类型调整传递值格式 target_field = 'website_description' translation_value = {'value': html_content} if target_field == 'website_description' else html_content # 调用XMLRPC创建翻译记录 models.execute_kw(db, uid, password, 'ir.translation', 'create', [[{ 'name': f'product.template,{target_field}', 'type': 'model', 'res_id': target_product_id, 'lang': 'zh_CN', # 替换为你的目标语言代码 'value': translation_value, 'state': 'translated' }]] )
3. 批量处理注意事项
- 增加异常捕获逻辑,处理文件读取失败、产品ID无效等情况,避免批量任务中断:
import traceback for product_id in product_id_list: try: # 上面的HTML读取、翻译更新代码 print(f"产品ID {product_id} 翻译更新成功") except Exception as e: print(f"产品ID {product_id} 更新失败: {str(e)}") traceback.print_exc() - 测试阶段先选取少量产品验证,确认翻译成功同步到Odoo后台及网站前端后,再执行全量批量操作。
补充说明
Odoo的HtmlField类型字段在GUI手动翻译时,后台会自动将输入的HTML内容包装为字典格式存储,批量更新时需要手动模拟这一逻辑,才能符合XMLRPC接口的参数要求。
内容的提问来源于stack exchange,提问作者Nesi
相关产品推荐
相关产品推荐

