插入Many2many Odoo(前OpenERP)

问题描述 投票:0回答:5

我正在尝试将值插入到 Odoo(以前的 OpenERP)中的

Many2many
One2many
关系表字段中。你知道如何做到这一点吗?

insert many-to-many odoo
5个回答
54
投票

这是来自 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)

invoice_line_tax_id
字段是多对多关系,
(6, 0, tax_ids)
表示用
tax_ids
中的记录替换任何现有记录。因为您正在调用
create()
,所以没有任何东西可以替换。

完整的选项列表位于 osv 类的文档中。

对于多对多字段,需要一个元组列表。这是接受的元组列表,具有相应的语义

(0, 0,  { values })
链接到需要使用给定值字典创建的新记录

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

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

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

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

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

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


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中将值插入到多对多关系表中,请看上面的例子


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)

0
投票

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


0
投票

在 Many2many 字段中添加数据:

self.m2m_field = [(4, self.project_id.id)]

在 one2many 字段中添加数据:

#Create list

data_list = []

#Adding data in list:

data_list.append((0, 0, {
    'user_id': self.user_id.id,
    'note': self.note,
    'create_date': self.create_date
}))

#Assign list to one2many field:

self.log_id = data_list
© www.soinside.com 2019 - 2024. All rights reserved.