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

Odoo 16配置翻译后无法访问服务器自定义模型数据求助

问题描述

我在本地机器的carddecks模块中成功添加i18n文件夹及pot文件,并为部分字段设置translate=True,本地可正常访问模型数据。但更新服务器后,访问模型数据时出现如下SQL错误:

LINE 1: ..."write_date", COALESCE("carddecks_card"."cardText"->>'pt_PT'...
                                                             ^
HINT:  No operator matches the given name and argument types. You might need to add explicit type casts.

完整报错信息:

Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/odoo/http.py", line 1579, in _serve_db
    return service_model.retrying(self._serve_ir_http, self.env)
  File "/usr/lib/python3/dist-packages/odoo/service/model.py", line 134, in retrying
    result = func()
  File "/usr/lib/python3/dist-packages/odoo/http.py", line 1608, in _serve_ir_http
    response = self.dispatcher.dispatch(rule.endpoint, args)
  File "/usr/lib/python3/dist-packages/odoo/http.py", line 1805, in dispatch
    result = self.request.registry['ir.http']._dispatch(endpoint)
  File "/usr/lib/python3/dist-packages/odoo/addons/website/models/ir_http.py", line 235, in _dispatch
    response = super()._dispatch(endpoint)
  File "/usr/lib/python3/dist-packages/odoo/addons/base/models/ir_http.py", line 144, in _dispatch
    result = endpoint(**request.params)
  File "/usr/lib/python3/dist-packages/odoo/http.py", line 698, in route_wrapper
    result = endpoint(self, *args, **params_ok)
  File "/usr/lib/python3/dist-packages/odoo/addons/web/controllers/dataset.py", line 42, in call_kw
    return self._call_kw(model, method, args, kwargs)
  File "/usr/lib/python3/dist-packages/odoo/addons/web/controllers/dataset.py", line 33, in _call_kw
    return call_kw(request.env[model], method, args, kwargs)
  File "/usr/lib/python3/dist-packages/odoo/api.py", line 457, in call_kw
    result = _call_kw_model(method, model, args, kwargs)
  File "/usr/lib/python3/dist-packages/odoo/api.py", line 430, in _call_kw_model
    result = method(recs, *args, **kwargs)
  File "/usr/lib/python3/dist-packages/odoo/addons/web/models/models.py", line 62, in web_search_read
    records = self.search_read(domain, fields, offset=offset, limit=limit, order=order)
  File "/usr/lib/python3/dist-packages/odoo/models.py", line 4968, in search_read
    result = records.read(fields, **read_kwargs)
  File "/usr/lib/python3/dist-packages/odoo/models.py", line 2992, in read
    self._read(stored_fields)
  File "/usr/lib/python3/dist-packages/odoo/models.py", line 3235, in _read
    cr.execute(query_str, params + [sub_ids])
  File "/usr/lib/python3/dist-packages/odoo/sql_db.py", line 315, in execute
    res = self._obj.execute(query, params)
psycopg2.errors.UndefinedFunction: operator does not exist: character varying ->> unknown
LINE 1: ..."write_date", COALESCE("carddecks_card"."cardText"->>'pt_PT'...
                                                             ^
HINT:  No operator matches the given name and argument types. You might need to add explicit type casts.


The above server error caused the following client error:
OwlError: The following error occurred in onWillStart: "Odoo Server Error"
    at wrapError (https://www.relationalgames.com/web/assets/504-41b52e3/web.assets_common.min.js:1445:77)
    at onWillStart (https://www.relationalgames.com/web/assets/504-41b52e3/web.assets_common.min.js:1451:117)
    at useModel (https://www.relationalgames.com/web/assets/505-11285c6/web.assets_backend.min.js:4709:1)
    at ListController.setup (https://www.relationalgames.com/web/assets/505-11285c6/web.assets_backend.min.js:4430:645)
    at new ComponentNode (https://www.relationalgames.com/web/assets/504-41b52e3/web.assets_common.min.js:1407:136)
    at https://www.relationalgames.com/web/assets/504-41b52e3/web.assets_common.min.js:1929:6
    at View.slot1 (eval at compile (https://www.relationalgames.com/web/assets/504-41b52e3/web.assets_common.min.js:1892:370), <anonymous>:15:36)
    at callSlot (https://www.relationalgames.com/web/assets/504-41b52e3/web.assets_common.min.js:1508:25)
    at WithSearch.template (eval at compile (https://www.relationalgames.com/web/assets/504-41b52e3/web.assets_common.min.js:1892:370), <anonymous>:8:12)
    at Fiber._render (https://www.relationalgames.com/web/assets/504-41b52e3/web.assets_common.min.js:1336:96)

Caused by: RPC_ERROR: Odoo Server Error
    at makeErrorFromResponse (https://www.relationalgames.com/web/assets/505-11285c6/web.assets_backend.min.js:967:163)
    at XMLHttpRequest.<anonymous> (https://www.relationalgames.com/web/assets/505-11285c6/web.assets_backend.min.js:974:13)
问题原因及解决方法

核心原因

PostgreSQL的->>操作符仅支持JSON/JSONB类型的字段,但服务器上的cardText字段仍为character varying(普通字符串类型)。当给Odoo字段设置translate=True后,Odoo会自动将该字段的数据库类型从字符串转换为JSONB,用于存储多语言键值对。服务器出现错误,是因为模块升级时未执行数据库字段类型的迁移操作,导致代码逻辑与数据库字段类型不匹配。

解决步骤

  1. 升级模块触发迁移:登录服务器的Odoo后台,找到carddecks模块,点击「升级」(Upgrade)按钮,确保模块的数据库迁移脚本完整执行。
  2. 手动修复字段类型:如果升级操作未生效,可直接连接服务器的PostgreSQL数据库,执行以下SQL语句(操作前请备份数据):
ALTER TABLE carddecks_card ALTER COLUMN cardText TYPE jsonb USING cardText::jsonb;
  1. 校验代码一致性:确认服务器上的carddecks模块代码与本地完全一致,确保i18n文件夹、pot文件及字段的translate=True设置都已同步。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 23:25:27