Odoo销售订单视图:按字段值切换显示日期字段问题
Odoo销售订单确认日期显示解决方案
一、创建正确的计算字段
你之前创建计算字段时错误遍历order_line导致AttributeError,核心问题是逻辑不需要涉及订单行,直接对比当前订单的date_order和create_date即可。在sale.order模型中添加以下计算字段:
from odoo import models, fields class SaleOrder(models.Model): _inherit = 'sale.order' display_confirmation_date = fields.Datetime(string='确认日期', compute='_compute_display_confirmation_date') def _compute_display_confirmation_date(self): for order in self: # 优先处理日期均存在的情况 if order.date_order and order.create_date: order.display_confirmation_date = order.date_order if order.date_order > order.create_date else order.create_date else: # 处理任一日期为空的边界情况 order.display_confirmation_date = order.date_order or order.create_date
二、配置树视图显示
Odoo视图的attrs不支持字段间直接的大小比较(会触发XMLSyntaxError),因此用计算字段封装逻辑后,再通过attrs控制可见性。继承原有销售订单树视图添加字段:
<record id="view_sale_order_tree_inherit" model="ir.ui.view"> <field name="name">sale.order.tree.inherit</field> <field name="model">sale.order</field> <field name="inherit_id" ref="sale.view_sale_order_tree"/> <field name="arch" type="xml"> <!-- 将字段插入到合适位置,示例为date_order之后 --> <field name="date_order" position="after"> <field name="display_confirmation_date" attrs="{'invisible': [('state', 'not in', ['sale', 'done'])]}" string="确认日期"/> </field> </field> </record>
三、错误原因说明
- attrs字段比较报错:Odoo视图的域表达式仅支持字段与固定值/上下文变量的比较,不支持字段间的直接大小判断,这类逻辑必须通过计算字段实现。
- order_line遍历报错:你的需求仅涉及订单级别的日期对比,无需操作订单行,遍历
order_line属于多余操作,且若订单无行时会触发属性错误。
内容的提问来源于stack exchange,提问作者Matija Amondi
相关产品推荐
相关产品推荐

