Odoo开发如何将三个字段列合并为tree视图单列展示
Odoo tree视图多字段合并为单列实现方法
直接修改tree视图的arch结构无法实现多字段同列展示,因为tree视图下每个<field>标签默认对应独立列,没有内置的字段拼接语法,推荐用以下两种方案实现:
方案1:新增计算字段(通用推荐,兼容所有Odoo版本)
这个方案灵活性最高,不会影响模型在其他场景的显示逻辑,支持自定义拼接格式、搜索排序。
- 修改模型代码,新增专门用于合并展示的计算字段,拼接逻辑可以根据需求自定义:
from odoo import models, fields, api class academy(models.Model): _name = 'academy' _description = 'academy' name = fields.Char(string="Имя") lastname = fields.Char(string="Фамилия") age = fields.Integer(string="Возраст") # 新增合并展示字段,store=True表示将值存入数据库,提升列表加载速度,支持搜索排序 full_info = fields.Char(string="人员信息", compute="_compute_full_info", store=True) description = fields.Text(string="Дополнительно") image = fields.Binary(string="Фотография") def _default_my_date(self): return fields.Date.context_today(self) date = fields.Date(string="Дата", default=_default_my_date) # 依赖被合并的三个字段,任意一个字段值变化时自动更新合并内容 @api.depends('name', 'lastname', 'age') def _compute_full_info(self): for record in self: # 处理空值避免拼接出现多余空格 name_part = f"{record.name or ''} {record.lastname or ''}".strip() # 自定义拼接格式,这里示例为「姓名 姓氏(年龄)」 record.full_info = f"{name_part}({record.age}岁)" if record.age else name_part
- 修改tree视图代码,删除原来单独展示的三个字段,替换为新增的合并字段:
<record id="view_academy_tree" model="ir.ui.view"> <field name="name">academy.tree</field> <field name="model">academy</field> <field name="arch" type="xml"> <tree> <!-- 替换原来的name、lastname、age三个独立字段 --> <field name="full_info"/> <field name="description"/> <field name="date"/> </tree> </field> </record>
方案2:重写name_get方法(适合合并内容为记录默认展示名的场景)
如果不需要单独控制列表页的展示逻辑,希望该模型在下拉选择、关联字段引用等所有场景都显示合并后的内容,可以直接重写模型的name_get方法,不需要新增字段:
- 在模型类中添加如下重写代码:
def name_get(self): result = [] for record in self: name_part = f"{record.name or ''} {record.lastname or ''}".strip() show_text = f"{name_part}({record.age}岁)" if record.age else name_part result.append((record.id, show_text)) return result
- 修改tree视图,将原来的三个字段替换为内置的
display_name字段即可:
<tree> <field name="display_name"/> <field name="description"/> <field name="date"/> </tree>
注意:代码修改完成后需要升级你的
academy自定义模块,刷新浏览器缓存后即可看到效果。
内容的提问来源于stack exchange,提问作者Dread
相关产品推荐
相关产品推荐

