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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 03:38:22