Я пытаюсь вставить значения в таблицу отношений many2many или one2manhy в odoo (бывший OpenERP). Ты хоть представляешь, как это сделать?
вставить в many2many odoo (бывший openerp)
Ответы (4)
Вот пример из стокового модуля < / а>:
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.
Для поля many2many ожидается список кортежей. Вот список принятых кортежей с соответствующей семантикой
(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) для каждого идентификатора в списке идентификаторов)
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, см. Пример выше.
При создании поля 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)
Просто поместите свое поле many2many в поле зрения (файл xml), и после запуска вашего модуля вы увидите поле many2many для вставки записей в свой графический интерфейс.