如何一次从多个组中删除用户 Odoo 12
How remove user from multiple groups at once Odoo 12
当联系表的写入方法从 'individual' 更改为 'company' 时,我想一次从多个组中删除用户。
@api.multi
def write(self, values):
user = self.env['res.users'].search([('partner_id', '=', self.id)])
if 'company_type' in values:
if values["company_type"] == "company":
# want to add in below group
"""[(6, 0, [self.env.ref('base.group_user').id,
self.env.ref('sales_team.group_sale_salesman_all_leads').id,
self.env.ref('survey.group_survey_manager').id
])]"""
# want to remove from below group
"""[(6, 0, [self.env.ref('base.group_portal').id,
self.env.ref('survey.group_survey_user').id,
])]"""
res = super(Contact, self).write(values)
return res
提前致谢
实际上你想删除一些组并添加一些其他组,首先当你使用 api.multi
总是期望 self 包含多个记录,所以当你这样做时 self.id
你会大概有大名鼎鼎的singleton Error
.
其次,不要仅在要对用户进行操作时才开始搜索用户,因此请将搜索移至 if statement
。
@api.multi
def write(self, values):
if values.get('company_type', False) == "company":
users = self.env['res.users'].search([('partner_id', 'in', self.ids)])
# remove some groups: [(3, id_of_group), ....etc]
to_remove = [(3, self.env.ref(group_xml_id).id) for group_xml_id in ['base.group_portal', 'survey.group_survey_user']]
# add some groups [(4, id_of_group), ... ect]
to_add = [(4, self.env.ref(group_xml_id).id) for group_xml_id in ['base.group_user',
'sales_team.group_sale_salesman_all_leads',
'survey.group_survey_manager']]
# contatenate the list to call write only one time
users.write({'groups_id': to_remove + to_add})
return super(Contact, self).write(values)
当你想从many2many字段中删除记录时使用command
(3, id_of_record)
,当你想添加一条记录(4, id_of_record)
:
Odoo ORM API 文档:
One2many and Many2many use a special “commands” format to manipulate
the set of records stored in/associated with the field.
This format is a list of triplets executed sequentially, where each
triplet is a command to execute on the set of records. Not all
commands apply in all situations. Possible commands are:
(0, _, values):
添加根据提供的值字典创建的新记录。
(1, id, values):
使用 values 中的值更新 id id 的现有记录。不能在 create() 中使用。
(2, id, _):
从集合中移除id为id的记录,然后删除(从数据库中)。能
不能在 create() 中使用。
(3, id, _):
从集合中移除id为id的记录,但不删除。不能在 One2many 上使用。不能在 create() 中使用。
(4, id, _) :
将 id id 的现有记录添加到集合中。不能在 One2many 上使用。
(5, _, _):
从集合中删除所有记录,相当于在每条记录上显式使用命令 3。不能在 One2many 上使用。不能在 create() 中使用。
(6, _, ids):
用 ids 列表替换集合中的所有现有记录,相当于对 ids 中的每个 id 使用命令 5 后跟命令 4。
当联系表的写入方法从 'individual' 更改为 'company' 时,我想一次从多个组中删除用户。
@api.multi
def write(self, values):
user = self.env['res.users'].search([('partner_id', '=', self.id)])
if 'company_type' in values:
if values["company_type"] == "company":
# want to add in below group
"""[(6, 0, [self.env.ref('base.group_user').id,
self.env.ref('sales_team.group_sale_salesman_all_leads').id,
self.env.ref('survey.group_survey_manager').id
])]"""
# want to remove from below group
"""[(6, 0, [self.env.ref('base.group_portal').id,
self.env.ref('survey.group_survey_user').id,
])]"""
res = super(Contact, self).write(values)
return res
提前致谢
实际上你想删除一些组并添加一些其他组,首先当你使用 api.multi
总是期望 self 包含多个记录,所以当你这样做时 self.id
你会大概有大名鼎鼎的singleton Error
.
其次,不要仅在要对用户进行操作时才开始搜索用户,因此请将搜索移至 if statement
。
@api.multi
def write(self, values):
if values.get('company_type', False) == "company":
users = self.env['res.users'].search([('partner_id', 'in', self.ids)])
# remove some groups: [(3, id_of_group), ....etc]
to_remove = [(3, self.env.ref(group_xml_id).id) for group_xml_id in ['base.group_portal', 'survey.group_survey_user']]
# add some groups [(4, id_of_group), ... ect]
to_add = [(4, self.env.ref(group_xml_id).id) for group_xml_id in ['base.group_user',
'sales_team.group_sale_salesman_all_leads',
'survey.group_survey_manager']]
# contatenate the list to call write only one time
users.write({'groups_id': to_remove + to_add})
return super(Contact, self).write(values)
当你想从many2many字段中删除记录时使用command
(3, id_of_record)
,当你想添加一条记录(4, id_of_record)
:
Odoo ORM API 文档:
One2many and Many2many use a special “commands” format to manipulate the set of records stored in/associated with the field.
This format is a list of triplets executed sequentially, where each triplet is a command to execute on the set of records. Not all commands apply in all situations. Possible commands are:
(0, _, values):
添加根据提供的值字典创建的新记录。
(1, id, values):
使用 values 中的值更新 id id 的现有记录。不能在 create() 中使用。
(2, id, _):
从集合中移除id为id的记录,然后删除(从数据库中)。能
不能在 create() 中使用。
(3, id, _):
从集合中移除id为id的记录,但不删除。不能在 One2many 上使用。不能在 create() 中使用。
(4, id, _) :
将 id id 的现有记录添加到集合中。不能在 One2many 上使用。
(5, _, _):
从集合中删除所有记录,相当于在每条记录上显式使用命令 3。不能在 One2many 上使用。不能在 create() 中使用。
(6, _, ids):
用 ids 列表替换集合中的所有现有记录,相当于对 ids 中的每个 id 使用命令 5 后跟命令 4。