词典合并列表
list of dictionary consolidation
我想在这里做的是 "consolidate" 具有相同 product_id
的相似行,并将其附加到另一个视图中的 one2many
字段 wizard
我必须使用此方法在我的向导字段中填写 sale_order_line
;
def default_get(self, cr, uid, fields, context=None):
if context is None: context = {}
res = super(sale_order_consolidation, self).default_get(cr, uid, fields, context=context)
picking_ids = context.get('active_ids', [])
active_model = context.get('active_model')
if not picking_ids or len(picking_ids) != 1:
return res
assert active_model in ('sale.order'),
picking_id, = picking_ids
picking = self.pool.get('sale.order').browse(cr, uid, picking_id, context=context)
items = []
packs = []
if not picking.order_line:
picking.do_prepare_partial()
for op in picking.order_line:
item = {
'ref': op.ref,
'product_id': op.product_id.id,
'name': op.name,
'product_uom_qty': op.product_uom_qty,
'product_uom': op.product_uom.name,
'price_standard': op.price_standard,
'price_unit': op.price_unit,
'discount_2': op.discount_2,
#'tax_id': op.tax_id.id,
'price_subtotal': op.price_subtotal,
}
#if op.product_id:
items.append(item)
for rec in items:
key = d['product_id']
# the right instruction to add QTY with the same products and append it to packs in order to update my one2many field
res.update(order_line_consolidation=items)
return res
而我真正想要的是:
d = [{'product_id': "x" , 'price': 1 , 'Qty': 2},
{'product_id': "y" , 'price': 5 , 'Qty': 4},
{'product_id': "x" , 'price': 1 , 'Qty': 1},
{'product_id': "z" , 'price': 9 , 'Qty': 1},
{'product_id': "y" , 'price': 5 , 'Qty': 5}
]
结果:
d = [{'product_id': "x" , 'price': 1 , 'Qty': 3},
{'product_id': "y" , 'price': 5 , 'Qty': 9},
{'product_id': "z" , 'price': 9 , 'Qty': 1},
]
我真正寻找的是添加具有相同产品的数量并将其附加到包装中以更新我的 one2many 字段的正确方法
感谢您的帮助,此致。
而不是使用列表使用字典并将 product_id 作为键:
items = {}
for op in picking.order_line:
item = items.get(op.product_id.id, False)
if item:
# if we have an item with the same product_id
# just add the quantity
item['product_uom_qty'] += op.product.product_uom_qty
else:
# create new dictionary and add it to glocal dictionary
item = {
'ref': op.ref,
'product_id': op.product_id.id,
'name': op.name,
'product_uom_qty': op.product_uom_qty,
'product_uom': op.product_uom.name,
'price_standard': op.price_standard,
'price_unit': op.price_unit,
'discount_2': op.discount_2,
#'tax_id': op.tax_id.id,
'price_subtotal': op.price_subtotal,
}
#add in product.id key
items[op.product_id.id] = item
# in the end convert the dict to list
list_item = []
for dummy, item in items.iteritems():
list_item.append(item)
我想在这里做的是 "consolidate" 具有相同 product_id
的相似行,并将其附加到另一个视图中的 one2many
字段 wizard
我必须使用此方法在我的向导字段中填写 sale_order_line
;
def default_get(self, cr, uid, fields, context=None):
if context is None: context = {}
res = super(sale_order_consolidation, self).default_get(cr, uid, fields, context=context)
picking_ids = context.get('active_ids', [])
active_model = context.get('active_model')
if not picking_ids or len(picking_ids) != 1:
return res
assert active_model in ('sale.order'),
picking_id, = picking_ids
picking = self.pool.get('sale.order').browse(cr, uid, picking_id, context=context)
items = []
packs = []
if not picking.order_line:
picking.do_prepare_partial()
for op in picking.order_line:
item = {
'ref': op.ref,
'product_id': op.product_id.id,
'name': op.name,
'product_uom_qty': op.product_uom_qty,
'product_uom': op.product_uom.name,
'price_standard': op.price_standard,
'price_unit': op.price_unit,
'discount_2': op.discount_2,
#'tax_id': op.tax_id.id,
'price_subtotal': op.price_subtotal,
}
#if op.product_id:
items.append(item)
for rec in items:
key = d['product_id']
# the right instruction to add QTY with the same products and append it to packs in order to update my one2many field
res.update(order_line_consolidation=items)
return res
而我真正想要的是:
d = [{'product_id': "x" , 'price': 1 , 'Qty': 2},
{'product_id': "y" , 'price': 5 , 'Qty': 4},
{'product_id': "x" , 'price': 1 , 'Qty': 1},
{'product_id': "z" , 'price': 9 , 'Qty': 1},
{'product_id': "y" , 'price': 5 , 'Qty': 5}
]
结果:
d = [{'product_id': "x" , 'price': 1 , 'Qty': 3},
{'product_id': "y" , 'price': 5 , 'Qty': 9},
{'product_id': "z" , 'price': 9 , 'Qty': 1},
]
我真正寻找的是添加具有相同产品的数量并将其附加到包装中以更新我的 one2many 字段的正确方法
感谢您的帮助,此致。
而不是使用列表使用字典并将 product_id 作为键:
items = {}
for op in picking.order_line:
item = items.get(op.product_id.id, False)
if item:
# if we have an item with the same product_id
# just add the quantity
item['product_uom_qty'] += op.product.product_uom_qty
else:
# create new dictionary and add it to glocal dictionary
item = {
'ref': op.ref,
'product_id': op.product_id.id,
'name': op.name,
'product_uom_qty': op.product_uom_qty,
'product_uom': op.product_uom.name,
'price_standard': op.price_standard,
'price_unit': op.price_unit,
'discount_2': op.discount_2,
#'tax_id': op.tax_id.id,
'price_subtotal': op.price_subtotal,
}
#add in product.id key
items[op.product_id.id] = item
# in the end convert the dict to list
list_item = []
for dummy, item in items.iteritems():
list_item.append(item)