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
相关产品推荐
相关产品推荐

