订单行信息的复制
- 
我想把以前建立的一个order_line的内容拷贝到正在创建的一个order_line上,拷贝动作发生在我在form的下拉框中选择了原来的order以后,我想通过on_change方法来实现: 
 def onchange_linked_order(self, cr, uid, ids, order_id, context=None):
 logistic_order_obj = self.pool.get('logistic.order')
 val = {}
 if order_id:
 order = logistic_order_obj.browse(cr,uid,order_id,context)
 val = {'order_line' : [line._id for line in order.order_line]}
 return {'value':val}
 其中order_line是logistic.order上的一个字段
 'order_line': fields.one2many('logistic.order.line', 'order_id', 'Order Lines'),
 我这样做以后,我发现结果是在添加新的订单后,原来那张订单的行内容消失了。估计是在数据库里的映射发生了变化。我期望的行为是不影响原来的订单行。
 各位大侠有没有好的办法解决这个问题?
- 
你将原来的订单行记录指向了新的订单了,旧订单当然就没有订单行数据了。你应该用copy的方法将订单行内容复制过来。 
- 
你说得对。我这样修改了一下: 
 def onchange_linked_order(self, cr, uid, ids, order_id, context=None):
 logistic_order_line_obj = self.pool.get('logistic.order.line')
 val = {}
 if order_id:
 order = self.browse(cr,uid,order_id,context)
 lines = [line._id for line in order.order_line]
 new_lines = logistic_order_line_obj.logistic_order_line_create(cr,uid,lines,context)
 val = {'order_line' : new_lines}
 return {'value':val}
 在logistic_order_line_create里我是用了create方法,导致required field,也就是这个
 'order_id': fields.many2one('logistic.order', 'Order Reference', ondelete='cascade', required=True)
 无法填。但是在创建Order的时候,实际上这个order_id还是未知的。
 这个问题如何解决?如果用copy来做的话,如何能够得到新的line的id传给"order_line"?
 def logistic_order_line_create(self, cr, uid, ids, context=None):
 if context is None:
 context = {}
 create_ids = []
 
 for line in self.browse(cr, uid, ids, context=context):
 vals = self.__prepare_logistic_order_line(cr, uid, line, context)
 if vals:
 inv_id = self.pool.get('logistic.order.line').create(cr, uid, vals, context=context)
 create_ids.append(inv_id)
 return create_ids
- 
我现在采用copy_data的方式来做, 
 def logistic_order_line_create(self, cr, uid, ids, context=None):
 if context is None:
 context = {}
 create_ids = []
 
 for line in self.browse(cr, uid, ids, context=context):
 vals = self.copy_data(cr, uid, line._id, context)
 if vals:
 inv_id = self.pool.get('logistic.order.line').create(cr, uid, vals, context=context)
 create_ids.append(inv_id)
 return create_ids
 再将
 new_lines = logistic_order_line_obj.logistic_order_line_create(cr,uid,lines,context)
 val = {'order_line' : new_lines}
 这样可以实现拷贝。但是如果我修改行上的内容,这个修改会产生如下效果:
 1.新订单上没有这一行
 2.link的订单上多了一行,值为修改后的内容。
 这个问题如何解决?
 [quote author=digitalsatori link=topic=8056.msg17674#msg17674 date=1374224613]
 你将原来的订单行记录指向了新的订单了,旧订单当然就没有订单行数据了。你应该用copy的方法将订单行内容复制过来。
 [/quote]

