如何在odoo 10中添加,更新和删除Many2many字段记录?

时间:2019-01-07 17:47:42

标签: python odoo

我正在向导中设置功能,该向导将执行以下操作:

  1. 添加新记录并链接到当前现有的Many2many字段。
  2. 更新当前现有的Many2many字段的记录。
  3. 删除当前现有的Many2many字段。 向导模型和实际模型具有两个Many2many字段
  4. customers_ids = fields.Many2many('res.partners','Customers')
  5. new_customers_ids = fields.Many2many('res.partners','新客户')

在视图中,Customers_ids是只读视图,其中new_customers_ids允许添加项目(客户)和删除。

当我从视图中添加新客户(new_customers_ids),但现在无法通过单击向导上的按钮(保存)来更新customer_ids(客户ID)时。 如何通过(new_customers_ids)中的添加/删除和更新来从(customers_ids)中添加/删除和更新记录?

 @api.multi 
def applychanges(self):

    for record in self:
        customers = []
        new_customers = []
        for customer in record.customers_ids:
            customers.append(customer.id)
        customers = list(set(customers))

        for x in record.new_customers_ids:
            new_customers.append(x.id)
        new_customers = list(set(new_customers_ids))

        record.customers_ids = [(1, 0, new_customers)]

我在哪里做错了?

1 个答案:

答案 0 :(得分:2)

对于每个the ORM documentation,使用1的左运算符应用作:

  

(1,id,values)

有效

  

使用值中的值更新ID为id的现有记录。


在您的代码中,您正在使用(1, 0, values),它试图更新id == 0的记录,该记录可能不存在。

对于它的价值,我很少看到左运算符用作1。通常,我使用4更新记录值,这会将new_customer添加到record的{​​{1}}字段中:

customer_ids

但是,使用record.customers_ids = [(4, 0, new_customers[0])] 仅支持一次添加一条记录(这就是我在上面的示例中使用4的原因。如果要一次添加许多记录,则可以使用列表推导:

new_customers[0]

为了完整起见,这是文档中的片段,其中包含每个可能的left运算符的用途和语法。作为参考,我几乎只使用过record.customers_ids = [(4, 0, new_customer) for new_customer in new_customers] 34

  

(0,_,值)

     

添加根据提供的值字典创建的新记录。

     

(1,ID,值)

     

使用ID中的值更新ID为6的现有记录   id。不能在values中使用。

     

(2,ID,_)

     

从集中删除ID为create()的记录,然后从数据库中删除它。不能在id中使用。

     

(3个ID,_)

     

从集合中删除id id的记录,但不删除它。不能在create()上使用。不能在One2many中使用。

     

(4个ID,_)

     

将ID为create()的现有记录添加到集合中。不能在id上使用。

     

(5,_,_)

     

从集合中删除所有记录,等效于在每个记录上显式使用命令One2many。不能在3上使用。不能在One2many中使用。

     

(6个,_,id)

     

create()列表替换集合中的所有现有记录,等效   对于ids中的每个5,使用命令4,然后使用命令id