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

Odoo(Python)继承purchase.order模型时如何修改日期格式?

场景1:仅需前端展示为日期格式(不改动原有字段逻辑,最简便)

不需要修改模型字段定义,直接在继承的视图中给date_order字段指定date类型的widget即可,前端会自动截断时间部分仅展示日期:

<record id="purchase_order_view_form_inherit" model="ir.ui.view">
    <field name="name">purchase.order.form.inherit</field>
    <field name="model">purchase.order</field>
    <field name="inherit_id" ref="purchase.purchase_order_form"/>
    <field name="arch" type="xml">
        <field name="date_order" position="attributes">
            <attribute name="widget">date</attribute>
        </field>
    </field>
</record>

场景2:需要在业务逻辑中使用日期类型的值

不建议直接覆写原有date_order的字段类型,会导致数据库类型不匹配、原有依赖该字段的Odoo原生逻辑报错。推荐新增存储型计算字段映射日期值:

  1. 首先在继承的自定义模型中新增字段和计算逻辑:
from odoo import fields, models, api

class PurchaseOrderInherit(models.Model):
    _inherit = 'purchase.order'

    # 新增日期类型的关联字段
    date_order_date = fields.Date(
        string='订单日期',
        compute='_compute_date_order_date',
        store=True,
        # 可以按需复制原字段的属性,比如必填、状态控制等
        required=True,
        states={'done': [('readonly', True)], 'cancel': [('readonly', True)]}
    )

    @api.depends('date_order')
    def _compute_date_order_date(self):
        for order in self:
            if order.date_order:
                # 从datetime值中提取日期部分
                order.date_order_date = order.date_order.date()
            else:
                order.date_order_date = None
  1. 如果需要替换原有date_order的入口,参照场景1的视图修改方法,把视图中原有date_order字段替换为date_order_date即可,不会影响原生业务逻辑的运行。

注意:如果强行覆写原有date_order的字段类型为fields.Date,会触发Odoo模块升级时的数据库迁移错误,同时原生采购模块中所有依赖date_order时间部分的逻辑(比如到期提醒、时效统计等)都会失效,不建议采用该操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 07:27:03