You need to enable JavaScript to run this app. Tryton关联字段搜索时未显示自定义属性、异常展示ID的问题排查
优惠活动
大模型
产品
解决方案
定价
更多

Tryton关联字段搜索时未显示自定义属性、异常展示ID的问题排查

问题根因定位
  • 直接触发异常的核心原因是自定义get_rec_name方法用了Tryton 2.x版本就已经废弃的旧写法,完全不兼容当前使用的新版本框架,自定义记录展示逻辑完全没有生效。
    你当前写的def get_rec_name(self, position): return self.position存在两个致命问题:
    1. 方法签名和新版本框架要求的入参完全不匹配,框架在调用该方法时会触发静默错误,自定义展示逻辑直接失效;
    2. 取值逻辑错误,代码里的return self.position是取模型类上绑定的字段定义对象,根本拿不到具体业务记录里的position字段值。
      当框架拿不到自定义的记录展示值时,会自动 fallback 到展示模型内置的主键id字段,这就是你看到的、从未在代码中定义的“ID属性提示”的来源。
  • 第二个遗漏的配置项:没有为meta.position模型配置基础列表视图。Tryton 默认不会自动把模型的业务字段暴露给关联字段的搜索弹窗使用,没有显式声明视图字段的情况下,弹窗只会加载系统内置的id字段,自然看不到你定义的position、area内容。
可落地的修复步骤
  • 修正meta.position模型的接口实现,替换错误的get_rec_name逻辑:
    按照Tryton官方API约定,get_rec_name是类级方法,需要加装饰器,返回记录ID到展示字符串的映射,同时补充搜索匹配逻辑让关联搜索能识别position、area字段:
    class MetaPosition(ModelSQL, ModelView):
        __name__ = 'meta.position'
    
        position = fields.Char('Position', translate=True, required=True)
        area = fields.Char('Area', translate=True, required=True)
    
        @classmethod
        def get_rec_name(cls, records, name):
            # 为每条生成可展示的名称,例如 "A (ar1)"
            return {
                record.id: f"{record.position} ({record.area})"
                for record in records
            }
    
        @classmethod
        def search_rec_name(cls, name, clause):
            # 支持关联字段搜索时按position、area值匹配
            return [
                'OR',
                ('position',) + clause[1:],
                ('area',) + clause[1:],
            ]
    
  • 补充模型的基础列表视图配置,新建视图XML文件并注册到tryton.cfg:
    配置最小化的Tree视图,把需要展示的position、area字段纳入视图范围,让关联搜索弹窗能正常加载这些字段:
    <record model="ir.ui.view" id="meta_position_tree_view">
        <field name="model">meta.position</field>
        <field name="type">tree</field>
        <field name="arch" type="string">
            <tree string="Position List">
                <field name="position"/>
                <field name="area"/>
            </tree>
        </field>
    </record>
    
  • 校验模块加载状态:
    代码和配置修改完成后,对开发中的模块执行版本升级,确保position.xml里的两条预置初始化记录被正确导入数据库;同时检查当前用户所属权限组,确保对meta.position模型有读权限,避免因为权限不足导致业务字段加载失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.28 05:06:08