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

Odoo16迁移至Odoo17时search_read无指定字段报错问题

Odoo 16迁移至17时search_read无指定字段触发异常问题

在将数据从Odoo 16迁移到Odoo 17的过程中,出现以下异常情况:

  • 调用search_read方法不指定具体字段时,执行代码:
res = models.execute_kw(db, uid, password, the_class, 'search_read', [domain], {'limit': 1})

会触发错误:'_unknown' object has no attribute 'id'

  • 但明确指定字段(例如仅获取name字段)时,操作可正常完成,执行代码:
res = models.execute_kw(db, uid, password, the_class, 'search_read', [domain], {'fields': ['name'], 'limit': 1})

完整错误堆栈信息:

Traceback (most recent call last):
  File "/opt/odoo17/odoo/odoo/http.py", line 1765, in _serve_db
    return service_model.retrying(self._serve_ir_http, self.env)
  File "/opt/odoo17/odoo/odoo/service/model.py", line 133, in retrying
    result = func()
  File "/opt/odoo17/odoo/odoo/http.py", line 1792, in _serve_ir_http
    response = self.dispatcher.dispatch(rule.endpoint, args)
  File "/opt/odoo17/odoo/odoo/http.py", line 1996, in dispatch
    result = self.request.registry['ir.http']._dispatch(endpoint)
  File "/opt/odoo17/odoo/odoo/addons/base/models/ir_http.py", line 222, in _dispatch
    result = endpoint(**request.params)
  File "/opt/odoo17/odoo/odoo/http.py", line 722, in route_wrapper
    result = endpoint(self, *args, **params_ok)
  File "/opt/odoo17/odoo/addons/web/controllers/dataset.py", line 28, in call_button
    action = self._call_kw(model, method, args, kwargs)
  File "/opt/odoo17/odoo/addons/web/controllers/dataset.py", line 20, in _call_kw
    return call_kw(request.env[model], method, args, kwargs)
  File "/opt/odoo17/odoo/odoo/api.py", line 468, in call_kw
    result = _call_kw_multi(method, model, args, kwargs)
  File "/opt/odoo17/odoo/odoo/api.py", line 453, in _call_kw_multi
    result = method(recs, *args, **kwargs)
  File "/opt/odoo17/addons/Geofarm/migration/models/models.py", line 99, in migrate_step1
    farm_vals = self.search_record(models,uid,'ferme.gaia',[])
  File "/opt/odoo17/addons/Geofarm/migration/models/models.py", line 33, in search_record
    res = models.execute_kw(db, uid, password, the_class, 'search_read', [domain], {'limit': 1})
  File "/usr/lib/python3.10/xmlrpc/client.py", line 1122, in __call__
    return self.__send(self.__name, args)
  File "/usr/lib/python3.10/xmlrpc/client.py", line 1464, in __request
    response = self.__transport.request(
  File "/usr/lib/python3.10/xmlrpc/client.py", line 1166, in request
    return self.single_request(host, handler, request_body, verbose)
  File "/usr/lib/python3.10/xmlrpc/client.py", line 1182, in single_request
    return self.parse_response(resp)
  File "/usr/lib/python3.10/xmlrpc/client.py", line 1354, in parse_response
    return u.close()
  File "/usr/lib/python3.10/xmlrpc/client.py", line 668, in close
    raise Fault(**self._stack[0])
xmlrpc.client.Fault: <Fault 1: 'Traceback (most recent call last):\n  File "/opt/odoo/odoo-server/odoo/addons/base/controllers/rpc.py", line 150, in xmlrpc_2\n    response = self._xmlrpc(service)\n  File "/opt/odoo/odoo-server/odoo/addons/base/controllers/rpc.py", line 130, in _xmlrpc\n    result = dispatch_rpc(service, method, params)\n  File "/opt/odoo/odoo-server/odoo/http.py", line 366, in dispatch_rpc\n    return dispatch(method, params)\n  File "/opt/odoo/odoo-server/odoo/service/model.py", line 37, in dispatch\n    res = execute_kw(db, uid, *params[3:])\n  File "/opt/odoo/odoo-server/odoo/service/model.py", line 59, in execute_kw\n    return execute(db, uid, obj, method, *args, **kw or {})\n  File "/opt/odoo/odoo-server/odoo/service/model.py", line 65, in execute\n    res = execute_cr(cr, uid, obj, method, *args, **kw)\n  File "/opt/odoo/odoo-server/odoo/service/model.py", line 50, in execute_cr\n    result = retrying(partial(odoo.api.call_kw, recs, method, args, kw), env)\n  File "/opt/odoo/odoo-server/odoo/service/model.py", line 133, in retrying\n    result = func()\n  File "/opt/odoo/odoo-server/odoo/api.py", line 462, in call_kw\n    result = _call_kw_model(method, model, args, kwargs)\n  File "/opt/odoo/odoo-server/odoo/api.py", line 435, in _call_kw_model\n    result = method(recs, *args, **kwargs)\n  File "/opt/odoo/odoo-server/odoo/models.py", line 5021, in search_read\n    result = records.read(fields, **read_kwargs)\n  File "/opt/odoo/odoo-server/odoo/models.py", line 2989, in read\n    return self._read_format(fnames=fields, load=load)\n  File "/opt/odoo/odoo-server/odoo/models.py", line 3168, in _read_format\n    vals[name] = convert(record[name], record, use_name_get)\n  File "/opt/odoo/odoo-server/odoo/fields.py", line 3011, in convert_to_read\n    return value.id\nAttributeError: '_unknown' object has no attribute 'id'\n'>

The above server error caused the following client error:
RPC_ERROR: Odoo Server Error
    RPCError@http://192.168.171.128:8017/web/assets/a644c0c/web.assets_web_dark.min.js:2873:319
    makeErrorFromResponse@http://192.168.171.128:8017/web/assets/a644c0c/web.assets_web_dark.min.js:2876:163
    jsonrpc/promise</<@http://192.168.171.128:8017/web/assets/a644c0c/web.assets_web_dark.min.js:2880:34

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 18:07:11