Odoo15视图表头修改:报价单编号格式调整方法咨询
修改Odoo 15销售报价单视图表头编号显示
要实现将表头的「Quotations / S00156」修改为「Quotations / S156」(保留编号首字符+后三位数字),有两种常用实现方式,均需先开启开发者模式:
方法一:直接修改视图标题表达式(快速实现)
- 进入任意销售报价单页面,点击右上角「编辑视图」按钮;或通过「设置 > 技术 > 视图 > 视图」搜索
sale.order.form打开表单视图。 - 在视图编辑界面,找到表单标签的
title属性(若未显式设置,可手动添加):- 原标题格式通常为:
"Quotations / %(name)s" - 修改为:
"Quotations / %(name[:1] + name[-3:])s"
- 原标题格式通常为:
- 保存视图,刷新页面即可看到效果。
说明:该表达式通过Python字符串切片实现:
name[:1]取编号首字符(如S),name[-3:]取编号最后三位数字,拼接后得到目标格式。若编号格式固定为「前缀+5位数字」,也可直接写为"Quotations / S%(name[-3:])s",但前者兼容性更强。
方法二:通过计算字段实现(灵活适配复杂场景)
如果需要适配更多编号格式或后续扩展,可创建计算字段后再绑定到视图标题:
- 进入「设置 > 技术 > 模型 > 模型」,找到
sale.order模型。 - 添加新字段:
- 字段名称:
short_name - 字段类型:字符型(Char)
- 勾选「存储」(可选,若需搜索可勾选)
- 计算逻辑(Python代码):
from odoo import api, fields, models class SaleOrder(models.Model): _inherit = 'sale.order' short_name = fields.Char(string='Short Reference', compute='_compute_short_name') @api.depends('name') def _compute_short_name(self): for rec in self: if rec.name and len(rec.name) >= 4: rec.short_name = rec.name[:1] + rec.name[-3:] else: rec.short_name = rec.name or ''
- 字段名称:
- 回到
sale.order.form视图,将title属性修改为:"Quotations / %(short_name)s" - 保存视图并刷新页面测试。
最佳实践:通过自定义模块继承视图
为避免直接修改系统视图导致升级覆盖,建议创建自定义模块继承视图:
在模块的views目录下创建XML文件,内容如下:
<odoo> <record id="sale_order_form_short_title" model="ir.ui.view"> <field name="name">sale.order.form.short.title</field> <field name="model">sale.order</field> <field name="inherit_id" ref="sale.view_order_form"/> <field name="arch" type="xml"> <xpath expr="//form" position="attributes"> <attribute name="title">Quotations / %(name[:1] + name[-3:])s</attribute> </xpath> </field> </record> </odoo>
安装该模块后即可生效,且不影响原系统视图。
内容的提问来源于stack exchange,提问作者odoo newbie
相关产品推荐
相关产品推荐

