Domanda

Sto cercando di inserire valori in una tabella di relazione di molti2many o One2Manhy in Odoo (ex OpenSerp). Hai idea di come farlo?

È stato utile?

Soluzione

Ecco un esempio da parte del modulo stock:

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 invoice_line_tax_id Il campo è una relazione molti-a-molti e il (6, 0, tax_ids) significa sostituire tutti i record esistenti con quelli in tax_ids. Perché stai chiamando create(), non c'è nulla da sostituire.

Un elenco completo di opzioni è in Documentazione per la classe OSV.

Per un campo di molti2 many, è previsto un elenco di tuple. Ecco l'elenco di tuple che sono accettati, con la semantica corrispondente

(0, 0, { values }) Collegamento a un nuovo record che deve essere creato con il dizionario dei valori forniti

(1, ID, { values }) Aggiorna il record collegato con id = id (scrivi i valori su di esso)

(2, ID) Rimuovi ed elimina il record collegato con ID = ID (chiama UNNK su ID, che eliminerà completamente l'oggetto e anche il collegamento ad esso)

(3, ID) Taglia il collegamento al record collegato con ID = ID (elimina la relazione tra i due oggetti ma non elimina l'oggetto target stesso)

(4, ID) Link al record esistente con id = id (aggiunge una relazione)

(5) UNKINK ALL (come usare (3, ID) per tutti i record collegati)

(6, 0, [IDs]) Sostituire l'elenco degli ID collegati (come usare (5) quindi (4, ID) per ciascun ID nell'elenco degli ID)

Altri suggerimenti

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 valori in una tabella di relazioni molti-a-many in OpenSerp, si prega di consultare l'esempio sopra

Quando creiamo il campo Many2Many, abbiamo usato questa sintassi:

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

Ora devi inserire in questa relazione eseguendo query come:

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

Basta mettere in vista il tuo campo MUSTI2MANY (file XML) e dopo aver eseguito il modulo puoi vedere molti 2Many Field per inserire record nella tua GUI

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top