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

如何修改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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 09:45:36