订单行信息的复制
-
我想把以前建立的一个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]