插入 Many2many Odoo(前 OpenERP)

Posted

技术标签:

【中文标题】插入 Many2many Odoo(前 OpenERP)【英文标题】:Insert into Many2many Odoo (former OpenERP) 【发布时间】:2012-03-11 18:05:58 【问题描述】:

我正在尝试将值插入到 Odoo(前 OpenERP)中的 Many2manyOne2many 关系表字段中。你知道怎么做吗?

【问题讨论】:

【参考方案1】:

这是来自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更新链接记录(在上面写values

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

(3, ID)切断id = ID的链接记录的链接(删除两个对象的关系但不删除目标对象本身)

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

(5) unlink all(如对所有链接记录使用 (3,ID))

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

【讨论】:

但我不知道 many2many rel 表的对象名称...这意味着我可以在数据库中查看该二列表,但我不知道如何通过http.request.registry[]。你知道怎么做吗?【参考方案2】:

当我们创建 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】:
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中将值插入到多对多关系表中,请看上面的例子

【讨论】:

【参考方案4】:

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

【讨论】:

我们可以在 'create(self, cr, user, vals, context=None):' 中将列表添加到 vals 参数中,以便一次插入多条记录吗?

以上是关于插入 Many2many Odoo(前 OpenERP)的主要内容,如果未能解决你的问题,请参考以下文章

many2many 字段上的 Odoo 特定表单视图

Odoo many2many command

odoo many2one或many2many字段动态domain的两种方法

odoo 输入明细时 可以多选吗

odoo10学习笔记十一:视图综述

doamin 过滤条件