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

Odoo 17.4(在线版)生产订单报表过滤自动化动作报错求助

Odoo 17.4在线版生产订单自定义筛选视图修复方案

问题根源

你遇到的语法错误是因为第19行写了return = {——在Python里return是关键字,不能当作变量赋值,直接写return {就能解决这个语法问题。原有报表失效大概率是代码错误导致自动化动作执行异常,干扰了原有逻辑。

修正后的实现代码

以下是修复语法问题、同时优化逻辑的完整代码,确保每种产品仅显示2条符合状态要求的生产订单:

# 获取状态为"已确认"或"进行中"的生产订单,按产品ID+创建时间倒序排序,确保取最新的2条
production_orders = env['mrp.production'].search(
    [('state', 'in', ['confirmed', 'in_progress'])],
    order='product_id, create_date desc'
)

# 按产品ID分组,每组最多保留2条记录
filtered_orders = {}
for order in production_orders:
    product_key = order.product_id.id
    if product_key not in filtered_orders:
        filtered_orders[product_key] = []
    if len(filtered_orders[product_key]) < 2:
        filtered_orders[product_key].append(order)

# 提取筛选后的订单ID列表
result_ids = [order.id for group in filtered_orders.values() for order in group]

# 返回自定义视图动作
return {
    'type': 'ir.actions.act_window',
    'name': '筛选后的生产订单',
    'res_model': 'mrp.production',
    'view_mode': 'tree',
    'domain': [('id', 'in', result_ids)],
    'context': env.context,  # 保留原有上下文,避免视图显示异常
}

关键优化说明

  1. 语法修复:移除return后的等号,直接返回动作字典
  2. 排序逻辑:添加order='product_id, create_date desc',确保每个产品取最新创建的2条订单,更贴合业务实际需求
  3. 上下文保留:加入'context': env.context,避免自定义视图丢失原有配置(如默认筛选、视图布局等)
  4. 高性能备选方案:如果生产订单数量极大,建议用SQL直接分组取数,避免循环遍历的性能损耗,示例写法:
self.env.cr.execute("""
    SELECT id FROM (
        SELECT 
            id, product_id,
            ROW_NUMBER() OVER (PARTITION BY product_id ORDER BY create_date DESC) AS rn
        FROM mrp_production
        WHERE state IN ('confirmed', 'in_progress')
    ) AS sub
    WHERE rn <= 2
""")
result_ids = [row[0] for row in self.env.cr.fetchall()]

部署验证步骤

  1. 进入Odoo后台「设置-自动化-自动化动作」,找到对应的目标动作
  2. 替换代码为修正后的版本,保存时确认无语法错误提示
  3. 触发动作(如菜单点击、按钮触发),验证是否显示符合要求的生产订单列表
  4. 检查原有报表是否恢复正常,若仍有问题需排查动作的触发条件是否与原有逻辑冲突

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 03:23:20