Odoo技术问题:如何正确获取指定组内用户并设置为字段默认值?
问题解决:Odoo中Many2many字段默认获取指定组的用户
错误原因
你写的domain条件('id','in','module.group_pos_manager')存在问题:in操作符需要接收用户ID列表,但你直接传入了组的XML ID字符串,这就触发了ValueError: Invalid domain term报错。
正确代码写法
以下两种方式都能实现需求:
方式1:直接通过组记录获取关联用户
managers = fields.Many2many('res.users', string="组内管理员", default=lambda self: self.env.ref('module.group_pos_manager').users)
说明:self.env.ref('模块名.组的XML_ID')用于获取指定组的记录,users是res.groups模型中关联用户的多对多字段,直接返回该组下的所有用户集合。
方式2:通过Domain搜索用户
managers = fields.Many2many('res.users', string="组内管理员", default=lambda self: self.env['res.users'].search([('groups_id', 'in', self.env.ref('module.group_pos_manager').ids)]))
说明:通过用户的groups_id字段筛选出属于目标组的用户,self.env.ref(...).ids会返回组的ID列表,符合in操作符的参数要求。
注意事项
- 替换代码中的
module为实际的模块名称,比如官方POS模块的组XML ID是pos.group_pos_manager; - 如果不确定组是否存在,可以添加容错处理,比如用
self.env.ref('...', raise_if_not_found=False)避免找不到组时程序崩溃。
内容的提问来源于stack exchange,提问作者odoo newbie
相关产品推荐
相关产品推荐

