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

Odoo移动端manyToOne关联:Sanction类如何显示ResPartner名称而非ID

解决Odoo移动端Sanction类many2one字段显示人员ID而非名称的问题

嘿,这个问题我太熟悉了!在Odoo里处理many2one字段的显示,尤其是移动端,核心是确保字段定义和视图配置都正确。我给你分步骤梳理解决方案:

1. 检查Sanction模型的many2one字段定义

首先确认你的partner_id字段是否正确关联到res.partner,并且没有覆盖默认的显示逻辑。正确的字段定义应该是这样的:

from odoo import models, fields

class Sanction(models.Model):
    _name = 'sanction'
    _description = 'Sanction Record'

    # 关键:关联res.partner模型,默认会使用对方的display_name显示
    partner_id = fields.Many2one('res.partner', string='关联人员', required=True)
    # 其他字段...

Odoo默认会用关联模型的display_name字段作为many2one的显示值,res.partner的display_name默认是由姓名、公司名等拼接而成的,所以只要字段定义正确,基础显示逻辑是没问题的。

2. 配置移动端专属视图

移动端有独立的视图渲染逻辑,你需要确保Sanction的form和tree视图适配移动端:

  • Form视图:在XML视图中明确指定字段的widget,确保移动端渲染正确:
<odoo>
    <record id="sanction_form_mobile" model="ir.ui.view">
        <field name="name">sanction.form.mobile</field>
        <field name="model">sanction</field>
        <field name="arch" type="xml">
            <form string="Sanction" mobile="True">
                <group>
                    <!-- 这里的partner_id会自动显示人员名称 -->
                    <field name="partner_id" widget="many2one"/>
                    <!-- 其他字段 -->
                </group>
            </form>
        </field>
    </record>
</odoo>
  • Tree视图:如果是列表页显示ID,要确保tree视图中包含partner_id字段,并且启用移动端适配:
<record id="sanction_tree_mobile" model="ir.ui.view">
    <field name="name">sanction.tree.mobile</field>
    <field name="model">sanction</field>
    <field name="arch" type="xml">
        <tree string="Sanctions" mobile="True">
            <field name="name"/>
            <field name="partner_id"/> <!-- 这里会显示人员名称而非ID -->
            <!-- 其他字段 -->
        </tree>
    </field>
</record>

3. 确认ResPartner的display_name字段正常

如果上面两步都做了还是显示ID,那要检查res.partner的display_name是否被自定义修改过。默认情况下,res.partner的display_name是自动计算的:

display_name = fields.Char(string='Display Name', compute='_compute_display_name', store=True)

如果你的系统里自定义了_compute_display_name方法,要确保它返回的是正确的人员名称(比如姓名),而不是ID或者其他值。

4. 升级模块并清除缓存

最后别忘了:

  • 在Odoo后台升级你的Sanction模块(设置->应用程序->找到模块点击升级)
  • 移动端APP需要清除缓存或者重启,确保加载最新的视图配置

这样操作后,移动端的Sanction页面里,关联人员应该就会显示名称而不是ID了!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:12:26