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

如何在Odoo v15中创建可直接编辑的非聚合数据透视表视图

Odoo v15 非聚合可编辑透视表实现方案

首先明确:Odoo v15原生数据透视视图默认仅支持聚合类数据展示,且视图全局只读,无法直接满足非聚合展示、空值补0、单元格直接编辑的需求,可通过以下两种方案实现:

方案一:扩展原生透视视图(保留透视表交互逻辑)

该方案基于原生Pivot视图做前后端扩展,无需额外新增模型,适配动态日期范围的灵活性更高

  • 后端改造
    1. 给原模型添加product_id+date的唯一约束,确保同产品同日期仅存在一条数据,这是无需聚合计算的基础前提,代码示例:
      _sql_constraints = [
          ('product_date_unique', 'UNIQUE(product_id, date)', '同产品同一日期仅可创建一条记录')
      ]
      
    2. 重写模型的read_group方法,自定义查询逻辑:遍历所有产品和查询范围内的所有日期,匹配对应qty值,无匹配记录的组合主动返回qty=0,跳过原生的sum/avg等聚合计算逻辑
  • 前端改造
    1. 继承Odoo原生PivotRenderer组件,修改单元格渲染规则:非聚合类型的数值单元格替换为数字输入框
    2. 给输入框绑定change事件,触发时调用write接口更新对应product_id+date匹配的原记录的qty值,操作完成后局部刷新透视表视图

方案二:用可编辑列表视图模拟透视表(开发量更低)

该方案用List视图模拟透视表的行列展示效果,前端改造成本更低,适合日期范围固定的场景

  • 新增一个瞬态模型(TransientModel)作为数据中转,固定字段为product_id,根据你需要展示的日期范围动态生成对应日期的数量字段(例如qty_20211101、qty_20211201)
  • 重写瞬态模型的default_get方法,初始化时自动遍历所有产品和日期范围,匹配原模型的qty值,无匹配记录的字段默认赋值为0
  • 给瞬态模型配置可编辑List视图,行展示product_id,列展示所有日期对应的数量字段,设置所有数量字段为可编辑状态
  • 重写瞬态模型的write方法,用户修改单元格值时,自动同步更新到原模型的对应记录,若原模型无对应product_id+date的记录则自动创建新记录

注意事项

  • 两种方案都需要保证product_id+date的组合唯一性,避免出现数据匹配错误、覆盖的问题
  • 若选择方案二,动态字段生成需要适配Odoo ORM的字段加载规则,避免运行时出现字段不存在的报错

内容的提问来源于stack exchange,提问作者abdeltif-b

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 09:06:02