如何修改Odoo销售订单中customer_lead字段类型为Int?
解决Odoo销售订单customer_lead字段转整数显示的问题
先看你写的代码里的两个明显错误:
- 继承的模型不对:销售订单的核心模型是
sale.order,不是sale.order.form,而且customer_lead是属于sale.order的字段,不是sale.order.line的,你继承错了模型和类。 - Odoo里不能直接通过继承重定义字段的类型,因为字段类型是数据库层面的属性,直接重写会被原字段覆盖,不会生效。
给你两种可行的解决办法:
方法一:新增计算字段展示整数天数
如果不想改动原字段的数据库类型,可以新增一个计算字段,把原float类型的customer_lead转成整数:
from odoo import fields, models class SaleOrder(models.Model): _inherit = 'sale.order' customer_lead_int = fields.Integer(string='Cust. Lead.', compute='_compute_customer_lead_int', store=True) def _compute_customer_lead_int(self): for order in self: order.customer_lead_int = int(order.customer_lead) if order.customer_lead else 0
之后在报表里直接调用customer_lead_int字段即可。store=True是让计算结果存在数据库里,提升性能,不需要的话可以去掉。
方法二:在报表模板里直接转换显示
如果不想新增字段,直接在报表的QWeb模板里处理,把float类型的字段转成整数显示,比如原来的报表代码里如果是:
<span t-field="o.customer_lead"/>
改成:
<span t-esc="int(o.customer_lead) if o.customer_lead else 0"/>
这样就能在报表里直接显示整数形式的天数了。
另外提醒:如果非要修改原字段的数据库类型,需要手动修改数据库表(sale_order表的customer_lead字段类型改成int),再在模型里把字段定义改成fields.Integer,但这种方法有风险,可能影响其他依赖该字段的功能,不推荐这么做。
内容的提问来源于stack exchange,提问作者Matija Amondi
相关产品推荐
相关产品推荐

