Odoo 对同一产品的数量行进行分组和求和

Odoo 对同一产品的数量行进行分组和求和,odoo,odoo-12,Odoo,Odoo 12,我有这个功能,它过滤所有选定生产任务的原材料行,然后创建一个显示在树状视图中的报告 但我有一个问题,同一个产品可能有分配线。所以我的目标是将所有这些行分组并显示它们,然后只在一行中显示数量总和 有人能帮我吗 类RawMaterialReport(models.Model): _名称='raw.material.report' _说明='原材料报告' product\u id=fields.manyOne('product.product',string='product',required=Fa

我有这个功能,它过滤所有选定生产任务的原材料行,然后创建一个显示在树状视图中的报告

但我有一个问题,同一个产品可能有分配线。所以我的目标是将所有这些行分组并显示它们,然后只在一行中显示数量总和

有人能帮我吗

类RawMaterialReport(models.Model):
_名称='raw.material.report'
_说明='原材料报告'
product\u id=fields.manyOne('product.product',string='product',required=False)
code=fields.Char(string='code',required=True,readonly=True)
总计数量=字段。浮点(字符串=总计数量,数字=(6,2),只读=真)
虚拟数量=字段.Float(string='Forcasted qty',数字=(6,2),只读=True)
origin=fields.Char(string='origin',required=True,readonly=True)
生产标识=字段.manyOne('mrp.production')
@api.multi
def开放式原材料(自身):
self.search([]).unlink()
mrp_productions=self._context.get('active_id'))
mrp_production=self.env['mrp.production'].浏览(mrp_productions)
不带默认代码的产品=mrp\U生产。已映射('move\u raw\u id')。已筛选(
lambda x:不是x.product\u id.default\u代码
)
raws=mrp_生产。映射('move_raw_id')。排序(
key=lambda r:r.product\u id.default\u代码
)
对于RAW中的r:
VAL={
“产品id”:r.product\u id.id,
“代码”:r.product\u id.default\u代码,
“总数量”:r.产品id.可用数量,
“虚拟数量”:r.产品id.虚拟可用,
“来源”:r.reference,
“生产id”:r.原材料生产id.id,
}
自我创建(VAL)

不要直接创建记录,而是将它们保存在按产品ID分组的字典中,当您发现产品已准备就绪时,只需对其记录求和即可 数量

@api.multi
def开放式原材料(自身):
self.search([]).unlink()
mrp_productions=self._context.get('active_id'))
mrp_production=self.env['mrp.production'].浏览(mrp_productions)
不带默认代码的产品=mrp\U生产。已映射('move\u raw\u id')。已筛选(
lambda x:不是x.product\u id.default\u代码
)
raws=mrp_生产。映射('move_raw_id')。排序(
key=lambda r:r.product\u id.default\u代码
)
#按产品分组
recs={}
对于RAW中的r:
product\u id=self.product\u id.id
如果记录中有产品标识:
#这里只需更新数量或任何其他要求和的字段
记录[产品编号][“产品数量”]+=自制产品编号产品数量
其他:
#将记录保存在记录中
记录[产品标识]={
“产品id”:r.product\u id.id,
“代码”:r.product\u id.default\u代码,
“总数量”:r.产品id.产品数量,
“虚拟数量”:r.产品id.虚拟可用,
“来源”:r.reference,
“生产id”:r.原材料生产id.id,
}
对于记录值()中的VAL:
#创建记录这将按产品创建记录
自我创建(VAL)

树/列表视图中的分组依据是什么?这还不够吗?不,因为还有另一个功能,用户将选择行并从中创建采购订单,这就是为什么要对行进行分组。是的,它应该是r.product\u uo\u数量而不是product\u id.qt\u可用,谢谢您的回答,顺便说一句,记录[product\u id][total\u qt]给我未解析的引用“total\u Quaty”和ValueError::“int”对象不适用于“action=model.open\u raw\u materials()oops这是一个字典使用
items()或values()
愚蠢的错误,
用于记录中的VAL.values()
,创建和写入预期字典不是整数(记录的ID,是记录的键)对于未解析的引用,我忘了把键放在引号之间,它是字符串值,但是我正在使用一个变量,很抱歉,昨天太晚了
recs[product_id]['your_field']+=self。您的_field
和您正在同一模型中创建记录
self.create()
我真的不明白你在做什么我正在从“操作”的“任务单”树视图中创建记录,但我已经解决了,现在可以正常工作了。谢谢,好东西。