2012-02-21 13 views

Odpowiedz

35

Oto przykład z 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) 

Pole invoice_line_tax_id jest wiele-do-wielu, a (6, 0, tax_ids) oznacza zastąpić istniejące rekordy z tymi w tax_ids. Ponieważ dzwonisz pod numer create(), nic nie zastąpi.

Pełna lista opcji znajduje się w documentation for the osv class.

Dla pola many2many oczekuje się listy krotek. Oto lista krotki, które są akceptowane, z odpowiednimi semantyki

(0, 0, { values }) link w nowym rekordzie, który musi zostać utworzony z podanych wartości słownik

(1, ID, { values }) Aktualizacja powiązany rekord z id = id (zapis wartości na nim)

(2, ID) usunąć i skasować powiązany rekord z id = ID (połączenia rozłączyć identyfikatora, który będzie usunąć obiekt całkowicie, a link do niego również)

(3, ID) wyciąć link do powiązanego rekordu z id = id (usuwanie relacji między dwoma obiektami, ale nie usuwa samego obiektu docelowego)

(4, ID) link do istniejącego rekordu z id = ID (dodaje relacji)

(5) rozłączenia wszystkich (jak przy użyciu (3, ID) dla wszystkich połączonych płyt)

(6, 0, [IDs]) wymienić liście powiązanych identyfikatory (na przykład za pomocą (5), a następnie (4, ID) dla każdego identyfikatora na liście identyfikatorów)

+0

Ale nie znam nazwy obiektu z wielu2 wielu tabel rel ... Oznacza to, że mogę wyświetlić ten dwukolumnowy w bazie danych, ale nie wiem, jak uzyskać to za pośrednictwem http.request. rejestr[]. Czy wiesz jak? –

0

Wystarczy umieścić swój many2many pole w widoku (plik XML) i po uruchomieniu modułu widać many2many pole do wstawiania rekordów w gui

+0

możemy dodać listę do parametru vals w 'create (self, cr, user, vals, context = None):' aby wstawić wiele rekordów naraz.? –

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 

można wstawić wartości w wiele-do-wielu tabeli relacji w OpenERP, proszę spojrzeć na powyższym przykładzie

2

Kiedy tworzymy pole many2many następnie użyliśmy tej składni:

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

teraz u trzeba wstawić do tej relacji przez wykonywania zapytań typu:

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