wstaw do many2many odoo (były openerp)

Próbuję wstawić wartości do tabeli relacji many2many lub one2manhy w odoo (dawniej OpenERP). Masz jakiś pomysł jak to zrobić?

Author: Bhavesh Odedra, 2012-02-21

4 answers

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

Pole invoice_line_tax_id jest relacją wiele do wielu, a (6, 0, tax_ids) oznacza zastąpienie istniejących rekordów tymi w tax_ids. Ponieważ dzwonisz create(), nie ma nic do zastąpienia.

Pełna lista opcji znajduje się w dokumentacji dla klasy osv .

Dla wielu pól oczekuje się listy krotek. Oto lista akceptowanych krotek, wraz z odpowiednimi semantyka

(0, 0, { values }) odsyłacz do nowego rekordu, który musi zostać utworzony z podanym słownikiem wartości

(1, ID, { values }) zaktualizuj połączony rekord za pomocą id = ID (Zapisz wartości na nim)

(2, ID) usunięcie i usunięcie połączonego rekordu za pomocą id = ID (wywołanie unlink na ID, które usunie obiekt całkowicie, a także link do niego)

(3, ID) Wytnij link do połączonego rekordu za pomocą id = ID (Usuń relację między dwoma obiekty, ale nie usuwa samego obiektu docelowego)

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

(5) unlink all (podobnie jak using (3,ID) dla wszystkich połączonych rekordów)

(6, 0, [IDs]) zamiast listy połączonych identyfikatorów (np. using (5) then (4), ID) dla każdego identyfikatora na liście identyfikatorów)

 52
Author: Don Kirkby,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-20 09:12:55
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żesz wstawić wartości do tabeli relacji wiele do wielu w OpenERP, spójrz na powyższy przykład

 7
Author: MKUMAR,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-16 06:17:13

Kiedy tworzymy pole many2many wtedy użyliśmy składni:

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

Teraz musisz wstawić do tej relacji przez execute queries takie jak:

 $ cr.execute('insert into relation_name (self_id,module_name_id) values(%s,%s)',(first_value,second_value)
 3
Author: Anup,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-16 12:39:26

Po prostu umieść swoje pole many2many w widoku (plik xml) i po uruchomieniu modułu możesz zobaczyć pole many2many do wstawiania rekordów w gui

 0
Author: Sudhir Arya,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-24 06:09:35