如何在Odoo表单视图中显示关联字段的其他字段值
Odoo关联字段显示与关联对象字段视图展示问题解决
一、修改关联字段的显示值(如Sale Order的partner_id显示mobile而非name)
Odoo中many2one关联字段的默认显示值由关联模型的_rec_name属性控制(res.partner默认_rec_name为name)。若仅需在销售订单场景下修改partner_id的显示内容,而非全局修改伙伴模型,可通过以下两种方式实现:
方法1:视图层面指定显示字段
找到销售订单表单视图中的partner_id字段,添加context参数指定默认显示字段:
<field name="partner_id" context="{'default_display_field': 'mobile'}"/>
该方式仅作用于当前视图,不会影响其他模块中res.partner的显示逻辑。
方法2:重写name_get方法(自定义显示格式)
若需同时展示多个字段(如name+mobile),可继承sale.order模型并重写相关逻辑:
from odoo import models class SaleOrder(models.Model): _inherit = 'sale.order' def name_get(self): result = [] for order in self: if order.partner_id and order.partner_id.mobile: display_name = f"{order.partner_id.name} ({order.partner_id.mobile})" else: display_name = super().name_get()[0][1] result.append((order.id, display_name)) return result
二、在视图中展示关联对象的其他字段(如partner_id的cp_logistik等)
你直接使用partner_id.cp_logistik的写法不符合Odoo视图规则——视图的field标签仅识别当前模型(sale.order)已定义的字段,关联对象的字段无法通过点语法直接调用。以下是两种可行解决方案:
方案1:添加关联字段(推荐)
在sale.order模型中定义related字段,关联到res.partner的对应字段:
from odoo import models, fields class SaleOrder(models.Model): _inherit = 'sale.order' partner_cp_logistik = fields.Char(related='partner_id.cp_logistik', string='CP Logistik', readonly=True) partner_cp_finance = fields.Char(related='partner_id.cp_finance', string='CP Finance', readonly=True) partner_cp_marketing = fields.Char(related='partner_id.cp_marketing', string='CP Marketing', readonly=True)
之后在视图中直接使用这些新字段即可:
<?xml version="1.0" encoding="utf-8"?> <odoo> <record id="sale_order_form_inherit" model="ir.ui.view"> <field name="name">sale.order.form.inherit</field> <field name="model">sale.order</field> <field name="inherit_id" ref="sale.sale_order_form"/> <field name="arch" type="xml"> <notebook position="inside"> <page string="BSP Prinsipal" name="bsp_prinsipal_page"> <group> <field name="partner_cp_logistik"/> <field name="partner_cp_finance"/> <field name="partner_cp_marketing"/> </group> </page> </notebook> </field> </record> </odoo>
related字段会自动同步关联对象的字段值,默认只读;若需编辑,可添加store=True并配置对应权限。
方案2:嵌入关联对象表单视图
若仅需查看无需编辑,可在视图中通过widget="form"嵌入res.partner的子字段:
<field name="partner_id" widget="form" readonly="1"> <form> <group> <field name="cp_logistik"/> <field name="cp_finance"/> <field name="cp_marketing"/> </group> </form> </field>
该方式会在销售订单页面内直接展示伙伴的指定字段,但无法单独编辑,需点击伙伴字段进入完整表单修改。
内容的提问来源于stack exchange,提问作者Andromeda
相关产品推荐
相关产品推荐

