用另一种方法odoo v8调用product_id_change

时间:2017-02-01 18:00:53

标签: python python-2.7 openerp odoo-8 openerp-8

模型sale.order.line中的

是函数:

def product_id_change(self , cr ,uid ids ........):

好吧,我一直试图做的是在另一种方法中触发这个功能,如:

@api.multi   
def change2(self):
    self.product_id_change(self.product2)

但它不起作用! 我得到错误:方法需要6个参数(6given) 所以他们告诉我,我应该传递更多的论点 所以我改变了我试过这个:

 self.product_id_change(                                                
        self.env.user.property_product_pricelist.id,                       
        self.product_id.prod_replace.id,                                   
        qty=1,                                                            
        qty_uos=1,                                                         
        partner_id=self.order_id.partner_id.id,                            
        date_order=self.order_id.date_order) 

现在我没有错误,它执行功能但有变化。 这真的需要帮助! 日Thnx

2 个答案:

答案 0 :(得分:1)

你需要提供这么多论点。

self.product_id_change(pricelist_id,product_id,qty=qty,uom=uom_id,qty_uos=qty,uos=False,name=name,partner_id=partner_id,lang=False,update_tax=True, date_order=date_order, packaging=False, fiscal_position=fiscal_position, flag=False, context=self._context)

答案 1 :(得分:0)

以便使用product_id_change! 你不需要传递所有元素,

def prod_change(self, cr, uid, ids, context=None):                               │
    print "new traitement-----------------======================="               │
    order_line = self.pool('sale.order.line')                                    │
    current_line = order_line.browse(cr, uid,                                    │
                                     ids[0],                                     │
                                     context=context)                            │
                                                                                 │
    print current_line.id                                                        │
    order_obj = self.pool.get('sale.order')                                      │
    order_id = order_obj.browse(cr, uid,                                         │
                                current_line.order_id.id,                        │
                                context=context)                                 │
    print order_id                                                               │
    order_lines = []                                                             │
    line_vals = self.product_id_change(                                          │
        cr, uid, 0, order_id.pricelist_id.id,                                    │
        current_line.product_id.prod_replace.id,                                 │
        partner_id=order_id.partner_id.id)['value']                              │
                                                                                 │
    line_vals.update(                                                            │
        {'product_id': current_line.product_id.prod_replace.id})                 │
    print order_lines                                                            │
    order_lines.append([1, ids[0], line_vals])                                   │
    order_obj.write(cr, uid,                                                     │
                    order_id.id,                                                 │
                    {'order_line': order_lines})                                 │
                                                                                 │
    return True 

好吧,dict返回:

product_id_change(                                          │
        cr, uid, 0, order_id.pricelist_id.id,                                    
        current_line.product_id.prod_replace.id,                                 
        partner_id=order_id.partner_id.id)['value']

我们可以使用它添加新行或替换相同的行使用正确的ID,如下面的代码所示:

order_lines.append([1, ids[0], line_vals])                                   
    order_obj.write(cr, uid,                                                     
                    order_id.id,                                                 
                    {'order_line': order_lines}) 

tds [0]给了我们当前的记录ID。 谢谢你们。