2012-02-21 9 views

risposta

35

Ecco un esempio dalla stock module:

  invoice_line_id = invoice_line_obj.create(cursor, user, { 
       'name': name, 
       'origin': origin, 
       'invoice_id': invoice_id, 
       'uos_id': uos_id, 
       'product_id': move_line.product_id.id, 
       'account_id': account_id, 
       'price_unit': price_unit, 
       'discount': discount, 
       'quantity': move_line.product_uos_qty or move_line.product_qty, 
       'invoice_line_tax_id': [(6, 0, tax_ids)], 
       'account_analytic_id': account_analytic_id, 
       }, context=context) 
      self._invoice_line_hook(cursor, user, move_line, invoice_line_id) 

Il campo invoice_line_tax_id è una relazione molti-a-molti, e il (6, 0, tax_ids) mezzi per sostituire tutti i record esistenti con quelli tax_ids. Perché stai chiamando create(), non c'è nulla da sostituire.

Un elenco completo di opzioni è nello documentation for the osv class.

Per un numero di molti, è previsto un elenco di tuple. Ecco l'elenco delle tuple che sono accettati, con la semantica corrispondenti

(0, 0, { values }) collegamento in un disco che deve essere creato con i valori indicati dizionario

(1, ID, { values }) aggiornamento del record collegato con id = ID (scrivere valori su di esso)

(2, ID) rimuovere ed eliminare il record collegato con id = ID (chiamate unlink su ID, che eliminare l'oggetto completamente, e il link ad esso pure)

(3, ID) tagliare il link al record collegato con id = ID (eliminare la relazione tra i due oggetti, ma non elimina l'oggetto di destinazione in sé)

(4, ID) link per record esistente con id = ID (aggiunge un rapporto)

(5) scollegare tutte (come l'utilizzo di (3, ID) per tutti i record collegati)

(6, 0, [IDs]) sostituire l'elenco di ID collegate (come l'utilizzo di (5), poi (4, ID) per ogni ID nella lista di ID)

+0

Ma non conosco il nome dell'oggetto della tabella rel many2many ... Ciò significa che posso visualizzare quel database a due colonne nel database, ma non so come farlo tramite http.request. registro di sistema []. Sai come? –

0

Basta mettere il vostro campo many2many a vista (file XML) e dopo aver eseguito il modulo si può vedere campo many2many per inserire i record nella vostra gui

+0

possiamo aggiungere un elenco al parametro vals in 'create (self, cr, user, vals, context = None):' per inserire più record contemporaneamente.? –

7
def list_customers(self, cr, uid, ids, context): 
    sale_obj = self.pool.get('sale.order') 
    for sale in self.browse(cr, uid, ids, context): 
     sale_ids = sale_obj.search(cr, uid, [('div_code_id','=',sale.div_code_id.id),('project_user','=',sale.project_id.id),('tower_id','=',sale.tower_id.id)]) 
     ids_cus = [] 
     for cus in sale_obj.browse(cr, uid, sale_ids, context): 
      if cus.partner_id.id not in ids_cus: 
       ids_cus.append(cus.partner_id.id) 
     self.write(cr, uid, ids, {'state_readonly':'listed','customer_ids': [(6, 0, ids_cus)]}) 
    return True 

È possibile inserire i valori in una relazione molti-a-molti tabella di relazione in OpenERP, si prega di guardare esempio di cui sopra

2

Quando creiamo campo many2many allora abbiamo usato la seguente sintassi:

'field_name':fields.many2many('Module_name','relation_name','self_id','module_name_id','string', 

Ora u bisogno di inserire in questa relazione per eseguire query come:

$ cr.execute('insert into relation_name (self_id,module_name_id) values(%s,%s)',(first_value,second_value)