вставить в много2 многих odoo (бывший openerp) - PullRequest
23 голосов
/ 21 февраля 2012

Я пытаюсь вставить значения в таблицу отношений many2many или one2manhy в odoo (ранее OpenERP).У вас есть идеи, как это сделать?

Ответы [ 4 ]

43 голосов
/ 22 февраля 2012

Вот пример из стокового модуля :

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)

Поле invoice_line_tax_id является отношением многие-ко-многим, а (6, 0, tax_ids) означает замену любых существующих записей на записи в tax_ids. Поскольку вы звоните create(), заменить нечего.

Полный список параметров приведен в документации для класса osv .

Для поля многие из многих ожидается список кортежей. Вот список принятых кортежей с соответствующей семантикой

(0, 0, { values }) ссылка на новую запись, которую необходимо создать с данным словарем значений

(1, ID, { values }) обновить связанную запись с id = ID (записать значения на ней)

(2, ID) удалить и удалить связанную запись с id = ID (вызывает unlink по ID, которая полностью удалит объект, а также ссылку на него)

(3, ID) вырезать ссылку на связанную запись с id = ID (удалить связь между двумя объектами, но не удаляет сам целевой объект)

(4, ID) ссылка на существующую запись с id = ID (добавляет связь)

(5) отменить связь всех (например, используя (3, ID) для всех связанных записей)

(6, 0, [IDs]) заменить список связанных идентификаторов (например, используя (5) затем (4, ID) для каждого идентификатора в списке идентификаторов)

7 голосов
/ 16 мая 2012
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

Вы можете вставить значения в таблицу отношений «многие ко многим» в OpenERP, пожалуйста, посмотрите на приведенный выше пример

3 голосов
/ 28 июля 2012

Когда мы создали поле many2many, мы использовали этот синтаксис:

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

Теперь вам нужно вставить в это отношение, выполнив такие запросы, как:

 $ cr.execute('insert into relation_name (self_id,module_name_id) values(%s,%s)',(first_value,second_value)
0 голосов
/ 24 февраля 2012

Просто поместите ваше поле many2many в поле зрения (файл xml), и после запуска вашего модуля вы увидите поле many2many для вставки записей в ваш графический интерфейс

...