Odoo中如何提取展示many2one字段值中'-'字符后的文本?
该需求完全可实现,以下是三种不同适用场景的实现方案:
方案1:全局生效(所有引用res.partner的关联字段都按该规则展示)
重写res.partner模型的name_get方法,适合需要全系统所有关联res.partner的下拉、展示字段都统一显示'-'后内容的场景:
from odoo import models, api class ResPartner(models.Model): _inherit = 'res.partner' def name_get(self): result = [] for partner in self: if '-' in partner.name: display_name = partner.name.split('-')[-1].strip() else: display_name = partner.name result.append((partner.id, display_name)) return result
方案2:仅针对当前自定义模块的partner_shipping_ids字段生效
不会影响其他模块的res.partner关联字段展示,适合仅当前模块需要该展示规则的场景。
注意:你提到的字段名
partner_shipping_ids带复数后缀_ids,通常是One2many/Many2many字段的命名规则,如果你实际是Many2one字段建议调整为单数命名避免混淆。
首先在你的自定义模型中新增计算字段:
from odoo import models, fields, api class YourCustomModel(models.Model): # 替换为你实际的自定义模型名称 _name = 'your.custom.model' # 你的原关联字段,根据实际字段类型调整 partner_shipping_ids = fields.Many2one('res.partner', string='配送合作伙伴') # 新增专用展示字段 shipping_partner_display = fields.Char(compute='_compute_shipping_name') @api.depends('partner_shipping_ids.name') def _compute_shipping_name(self): for record in self: if not record.partner_shipping_ids: record.shipping_partner_display = '' continue name = record.partner_shipping_ids.name record.shipping_partner_display = name.split('-')[-1].strip() if '-' in name else name
之后在模块的视图XML中,把原来展示partner_shipping_ids的位置替换为shipping_partner_display字段即可。
方案3:仅单视图临时生效(无需修改后端代码)
如果只需要在某一个列表/表单视图中临时修改展示规则,可以直接在XML视图中用Qweb语法处理:
<!-- 列表视图示例 --> <field name="partner_shipping_ids"> <tree> <field name="name" t-esc="record.name.split('-')[-1].strip() if '-' in record.name else record.name"/> </tree> </field>
内容的提问来源于stack exchange,提问作者Oscar Vardela
相关产品推荐
相关产品推荐

