2017-10-12 1 views
2

sur odoo j'essayais d'onchange. La condition est, après que j'aie inséré les données comme "SO00012", mon code essayera de parcourir les données par le code d'insertion. voici mon code:odoo onchange pas obtenir les données

def onchange_data(self, cr, uid, vals, ids, context=None): 

    stocks_picking_onchange = self.browse(cr, uid) 
    products = [] 

    stiks = self.browse(cr, uid, ids) 
    objk = self.pool.get('purchase.order') 
    objeck = self.pool.get('data.stock.picking') 
    objecks = objk.search(cr, uid,[('name','=',stiks.origin)]) 
    datas = objk.browse(cr, uid, objecks) 

    if datas: 
     for data in datas: 
      for line in data.order_line: 
       products.append((0, 0, { 
        'data1': line.id, 
        'data2' : line.product_qty, 
        'data3' : line.bonus, 
       })) 

Mais je n'ai jamais obtenir les données, mon ami me sugges ajouter la méthode créer comme:

def onchange_data(self, cr, uid, vals, ids, context=None): 
    res = super(stock_picking, self).create(cr, uid, vals, context=context) 
    stocks_picking_onchange = self.browse(cr, uid) 
    products = [] 

Mais, il est stil ne fonctionne pas

+0

Je n'ai pas vu d'instruction return dans votre méthode * onchange() *. –

Répondre

1

Il est vrai que vous avez créé la liste des enregistrements, mais vous ne l'avez pas affecté à un champ de votre modèle:

if datas: 
     products.append((5,0,false)) # if you want to remove all old records 
     # i think without this line you will add the new record to the old list 
     for data in datas: 
      for line in data.order_line: 
       products.append((0, 0, { 
        'data1': line.id, 
        'data2' : line.product_qty, 
        'data3' : line.bonus, 
       })) 
# return your value 
return {'values' : {'your_field_name_here': products}} 

une chose y Vous devez savoir avec onchange data1, data2 et data3 doivent apparaître dans l'arborescence de votre domaine ou client Web ne saura pas où les stocker et ils seront perdus.