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

Odoo 16树形视图设置列宽报错,寻求有效解决方案

调整Odoo 16树形视图列宽的正确方法(解决ParseError报错)

问题背景

环境:Ubuntu 22.04桌面版,Odoo 16 + PyCharm CE
现有树形视图包含4列,name列占用近80%空间,尝试通过给<field>标签添加style属性调整列宽:

<field name="name" style="width: 50px !important;"/>

模块升级时触发ParseError,报错信息如下:

Traceback (most recent call last):
  File "/home/odoo16/odoo-server/odoo/http.py", line 1587, in _serve_db
    return service_model.retrying(self._serve_ir_http, self.env)
  File "/home/odoo16/odoo-server/odoo/service/model.py", line 134, in retrying
    result = func()
  File "/home/odoo16/odoo-server/odoo/http.py", line 1614, in _serve_ir_http
    response = self.dispatcher.dispatch(rule.endpoint, args)
  File "/home/odoo16/odoo-server/odoo/http.py", line 1811, in dispatch
    result = self.request.registry['ir.http']._dispatch(endpoint)
  File "/home/odoo16/odoo-server/addons/website/models/ir_http.py", line 235, in _dispatch
    response = super()._dispatch(endpoint)
  File "/home/odoo16/odoo-server/odoo/addons/base/models/ir_http.py", line 154, in _dispatch
    result = endpoint(**request.params)
  File "/home/odoo16/odoo-server/odoo/http.py", line 700, in route_wrapper
    result = endpoint(self, *args, **params_ok)
  File "/home/odoo16/odoo-server/addons/web/controllers/dataset.py", line 46, in call_button
    action = self._call_kw(model, method, args, kwargs)
  File "/home/odoo16/odoo-server/addons/web/controllers/dataset.py", line 33, in _call_kw
    return call_kw(request.env[model], method, args, kwargs)
  File "/home/odoo16/odoo-server/odoo/api.py", line 461, in call_kw
    result = _call_kw_multi(method, model, args, kwargs)
  File "/home/odoo16/odoo-server/odoo/api.py", line 448, in _call_kw_multi
    result = method(recs, *args, **kwargs)
  File "<decorator-gen-80>", line 2, in button_immediate_upgrade
  File "/home/odoo16/odoo-server/odoo/addons/base/models/ir_module.py", line 76, in check_and_log
    return method(self, *args, **kwargs)
  File "/home/odoo16/odoo-server/odoo/addons/base/models/ir_module.py", line 678, in button_immediate_upgrade
    return self._button_immediate_function(type(self).button_upgrade)
  File "/home/odoo16/odoo-server/odoo/addons/base/models/ir_module.py", line 615, in _button_immediate_function
    registry = modules.registry.Registry.new(self._cr.dbname, update_module=True)
  File "<decorator-gen-14>", line 2, in new
  File "/home/odoo16/odoo-server/odoo/tools/func.py", line 87, in locked
    return func(inst, *args, **kwargs)
  File "/home/odoo16/odoo-server/odoo/modules/registry.py", line 90, in new
    odoo.modules.load_modules(registry, force_demo, status, update_module)
  File "/home/odoo16/odoo-server/odoo/modules/loading.py", line 483, in load_modules
    processed_modules += load_marked_modules(cr, graph,
  File "/home/odoo16/odoo-server/odoo/modules/loading.py", line 371, in load_marked_modules
    loaded, processed = load_module_graph(
  File "/home/odoo16/odoo-server/odoo/modules/loading.py", line 230, in load_module_graph
    load_data(cr, idref, mode, kind='data', package=package)
  File "/home/odoo16/odoo-server/odoo/modules/loading.py", line 71, in load_data
    tools.convert_file(cr, package.name, filename, idref, mode, noupdate, kind)
  File "/home/odoo16/odoo-server/odoo/tools/convert.py", line 763, in convert_file
    convert_xml_import(cr, module, fp, idref, mode, noupdate)
  File "/home/odoo16/odoo-server/odoo/tools/convert.py", line 829, in convert_xml_import
    obj.parse(doc.getroot())
  File "/home/odoo16/odoo-server/odoo/tools/convert.py", line 749, in parse
    self._tag_root(de)
  File "/home/odoo16/odoo-server/odoo/tools/convert.py", line 709, in _tag_root
    raise ParseError(msg) from None  # Restart with "--log-handler odoo.tools.convert:DEBUG" for complete traceback
odoo.tools.convert.ParseError: while parsing /home/odoo16/odoo-server/custom_addons/om_hospital/views/units_config.xml:38
Invalid view unitsconfig.tree (om_hospital.config_unit_types_tree_view) definition in om_hospital/views/units_config.xml

View error context:
'-no context-'


The above server error caused the following client error:
RPC_ERROR: Odoo Server Error
    RPCError@http://localhost:8069/web/assets/debug/web.assets_backend.js:10193:9 (/web/static/src/core/network/rpc_service.js:11)

makeErrorFromResponse@http://localhost:8069/web/assets/debug/web.assets_backend.js:10216:19 (/web/static/src/core/network/rpc_service.js:34)
    jsonrpc/promise</<@http://localhost:8069/web/assets/debug/web.assets_backend.js:10269:48 (/web/static/src/core/network/rpc_service.js:87)

错误原因

Odoo的XML视图解析器不允许给<field>标签直接添加style属性,这属于非法的XML视图定义,因此触发ParseError。

解决方案

方法一:使用<column>标签包裹字段设置宽度

在树形视图的<tree>标签内,用<column>标签包裹需要调整宽度的字段,通过width属性指定宽度值,示例:

<tree string="Units Config">
    <!-- 给name列设置宽度 -->
    <column width="120">
        <field name="name"/>
    </column>
    <!-- 其他字段列 -->
    <column width="80">
        <field name="code"/>
    </column>
    <column width="100">
        <field name="capacity"/>
    </column>
    <field name="active"/> <!-- 不设置宽度则自动分配 -->
</tree>
  • width属性支持像素值(如120)或百分比(如"25%")
  • 表头宽度会自动与列内容宽度匹配,无需额外配置

方法二:通过自定义CSS文件控制样式

如果需要更灵活的全局或特定视图样式控制,可采用CSS方案:

  1. 在模块目录下创建static/src/css/tree_view_custom.css文件,添加样式:
/* 针对特定视图的name列设置宽度 */
.o_list_view[data-view-id="om_hospital.config_unit_types_tree_view"] .o_list_column[name="name"] {
    width: 120px !important;
}

/* 全局所有树形视图的name列设置宽度 */
/* .o_list_view .o_list_column[name="name"] {
    width: 120px !important;
} */
  1. 在模块的__manifest__.py中引入该CSS文件:
'assets': {
    'web.assets_backend': [
        'om_hospital/static/src/css/tree_view_custom.css',
    ],
},
  • 替换om_hospital为你的实际模块名称
  • 此方法不会触发XML解析错误,样式控制更精准

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 07:32:16