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原生逻辑报错。推荐新增存储型计算字段映射日期值:
- 首先在继承的自定义模型中新增字段和计算逻辑:
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
- 如果需要替换原有
date_order的入口,参照场景1的视图修改方法,把视图中原有date_order字段替换为date_order_date即可,不会影响原生业务逻辑的运行。
注意:如果强行覆写原有
date_order的字段类型为fields.Date,会触发Odoo模块升级时的数据库迁移错误,同时原生采购模块中所有依赖date_order时间部分的逻辑(比如到期提醒、时效统计等)都会失效,不建议采用该操作。
内容的提问来源于stack exchange,提问作者ERD
相关产品推荐
相关产品推荐

