在maintenance(维护)的maintenance.request(保养请求)中新增执行人“zhi_xing_ren_ids”字段,人员应从团队成员中选择
1、原例:
maintenance_team_id = fields.Many2one(
'maintenance.team',
string='Team',
required=True,
default=_get_default_team_id,
check_company=True)
#新增的
zhi_xing_ren_ids=fields.Many2many(
comodel_name='res.users',
relaton='maintenance_request_users_rel',
column1='maintenance_request_id',
column2='res_users_id',
string='执行人',
domain="[('company_ids', 'in', company_id)]")
以上运行正常,未进行筛选;
2、domain改为
domain=lambda self: [('company_ids', 'in',self.company_id.id),('id', 'in',self.maintenance_request_id.member_ids.ids)]
执行后不能正常过滤,没有返回任何数据,去掉后一个条件执行后结果一样
3、改用onchange来触发
@api.onchange('maintenance_team_id')
def _onchange_maintenance_team_id(self):
self.zhi_xing_ren_ids=False
if self.maintenance_team_id:
members=self.maintenance_team_id.member_ids.ids
return {'domain':{'zhi_xing_ren_ids':[('company_ids', 'in', self.company_id.id),('id','in',members)]}}
测试 :用onchange来触发有个缺点,必须要maintenance_team_id发生改变才能变更domain,当保存后要修改zhi_xing_ren_ids时onchange里的domain是不生效的,因为maintenance_team_id没有变
4、又改用定义方法来获取团队成员id
domain=lambda self: [('id', 'in',self._team_members())]
def _team_members(self):
if self.maintenance_team_id:
print(str(self.maintenance_team_id.member_ids.ids))
return self.maintenance_team_id.member_ids.ids
运行后,在新建form视图中不起作用,
在点击已存在的保养请求进入form视图时,能打印出maintenance_team_id.member_ids.ids,再编辑时就没有效果了
5、直接将maintenance_team_id.member_ids.ids的值写在domain中,如:[36,37]
domain=lambda self: [('id', 'in',[36,37])]
运行后domain是生效的
依据以上测试,写在字段中的变量似乎不起作用,只在进行修改时,进入form视图时触发一下,不知道网络上其他人怎么实现的
不知道该咋办了