我正在向导中设置功能,该向导将执行以下操作:
在视图中,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)]
我在哪里做错了?
答案 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]
,3
或4
。
(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
。