通过这次尝试,深入理解了python字典的用法。
在库存入库商品添加的时候,同样的商品我的处理方法(Methon One)和老大指点的优化方法(Two),效率不是一点半点的高:
def create(self, cr, uid, vals, context=None):
if not vals.has_key('move_lines_apply') or len(vals['move_lines_apply'])==0:
raise except_osv(_('Warning'),_("请添加商品后再提交"))
#Methon One
new_move_lines = {}
move_lines_total = {}
for move_line in vals['move_lines_apply']:
key = move_line[2]['product_id']
value = move_line[2]['product_qty']
new_value = move_lines_total.get(key,0) + value
move_lines_total[key] = new_value
move_line[2]['product_qty'] = new_value
new_move_lines[key] = move_line
#Methon Two
move_lines_total = {}
for move_lines in vals['move_lines_apply']:
key = move_lines[2]['product_id']
value = move_lines[2]['product_qty']
move_lines_total[key] = move_lines_total.get(key,0) + value
new_move_lines = []
for line in move_lines_total:
num = move_lines_total[line]
for move_lines in vals['move_lines_apply']:
if line == move_lines[2]['product_id']:
move_lines[2]['product_qty'] = num
new_move_lines.append(move_lines)
break
vals['move_lines_apply'] = new_move_lines.values()
vals['state'] = 'wait_picking'
return super(stock_picking_apply, self).create(cr, uid, vals, context=context)