插入many2many odoo(前openerp)

时间:2012-02-21 12:11:20

标签: insert many-to-many openerp

我正在尝试将值插入到odoo(以前的OpenERP)中的many2many或one2manhy关系表中。你知道怎么做吗?

由于

4 个答案:

答案 0 :(得分:42)

以下是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)

invoice_line_tax_id字段是多对多关系,(6, 0, tax_ids)表示将任何现有记录替换为tax_ids中的记录。因为您正在呼叫create(),所以无需替换。

完整的选项列表位于documentation for the osv class

  

对于many2many字段,预计会有一个元组列表。这是接受的元组列表,带有相应的语义

     

(0, 0, { values })链接到需要使用给定值字典

创建的新记录      

(1, ID, { values })使用id = ID更新链接记录(在其上写

     

(2, ID)删除并删除id = ID的链接记录(在ID上调用unlink,这将完全删除对象,以及指向它的链接)

     

(3, ID)使用id = ID剪切到链接记录的链接(删除两个对象之间的关系,但不删除目标对象本身)

     

(4, ID)链接到id = ID的现有记录(添加关系)

     

(5)取消全部链接(例如对所有链接记录使用(3,ID))

     

(6, 0, [IDs])替换链接ID列表(如使用(5)然后(4,ID)ID列表中的每个ID)

答案 1 :(得分: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

您可以在OpenERP中的多对多关系表中插入值,请看上面的示例

答案 2 :(得分:3)

当我们创建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)

答案 3 :(得分:0)

只需将您的many2many字段放入视图(xml文件),运行模块后,您可以看到many2many字段在您的gui中插入记录