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

Odoo v8转v10 product_pack模块_product_available函数转换报错求助

解决Odoo v8到v10 _product_available 转换中的类型适配错误

这个错误的核心是Odoo从v8到v10的ORM API发生了根本性变化:传统的cr/uid/ids参数被记录集(Recordset)机制替代,你原来的代码试图传递ID列表给父类方法,和v10 ORM期望的记录集类型不匹配,才触发了can't adapt type 'product.product'错误。

下面是具体的修正方案和完整代码:

问题根源拆解

在v8中,_product_available需要手动传入ID列表来指定要计算的产品;但v10里,该方法直接作用于当前的记录集,方法内部会自动处理记录集里的所有产品,不需要再手动传ID列表。

修正后的完整v10代码

import math

def _product_available(self, field_names=None, arg=False):
    # 仅过滤当前记录集中的打包产品(避免全局搜索)
    pack_products = self.filtered(lambda p: p.pack)
    # 调用父类方法获取非打包产品的库存数据(直接对记录集操作)
    res = super(product_product, self)._product_available(field_names, arg)
    
    for product in pack_products:
        pack_qty_available = []
        pack_virtual_available = []
        for subproduct in product.pack_line_ids:
            # 直接对子产品记录集调用库存方法,而非传ID列表
            sub_stock_data = subproduct.product_id._product_available(field_names, arg)[subproduct.product_id.id]
            sub_qty = subproduct.quantity
            if sub_qty:
                pack_qty_available.append(math.floor(sub_stock_data['qty_available'] / sub_qty))
                pack_virtual_available.append(math.floor(sub_stock_data['virtual_available'] / sub_qty))
        
        # 计算打包产品的最终库存值
        qty_available = min(pack_qty_available) if pack_qty_available else False
        virtual_available = max(min(pack_virtual_available), 0) if pack_virtual_available else False
        res[product.id] = {
            'qty_available': qty_available,
            'incoming_qty': 0,
            'outgoing_qty': 0,
            'virtual_available': virtual_available,
        }
    return res

关键修改点说明

  1. 过滤打包产品:用self.filtered(lambda p: p.pack)替代原来的search,只处理当前记录集中的打包产品,而非全局搜索,更符合v10的ORM设计逻辑。
  2. 父类方法调用:直接对self - pack_products(非打包产品记录集)调用父类方法,不需要手动传ID列表,完美适配v10的参数要求。
  3. 递归查询子产品:通过subproduct.product_id._product_available()直接对子产品记录集调用方法,避免了ID列表到记录集的类型转换错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:23:41