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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 02:42:21