odoo 12. 我不能在 many2one 字段上做一个动态过滤器

odoo 12. I can't do a dynamic filter on a many2one field

我想根据一些条件检索用户。我可以使用 odoo-bin 执行以下请求,并且我有我想要检索的用户。

我的查询:

self.env['res.users'].sudo().search([('id','in',[k.name_student_id.id for k in self.env['rdv.rdv'].sudo().search([('nb_rdv','>=',1)])])]).ids

查询 returns ID 列表。但是当我在 many2one 字段中输入相同的查询时,我得到了所有用户。我只是觉得请求没有被执行。

我在字段中的查询:

name_student_id = fields.Many2one('res.users', 'Etudiant', required=True, default=lambda self: self.env['res.users'].sudo().search([('id','in',[k.name_student_id.id for k in self.env['rdv.rdv'].sudo().search([('nb_rdv','>=',1)])])]).ids )

我的查询必须是这样的:

name_student_id = fields.Many2one('res.users', 'Etudiant', required=True, default=lambda self: self.env['res.users'].sudo().search([('id','in','[43,64,65]')]) )

我需要帮助,想知道是否有另一种方法可以执行查询并将结果显示在 many2one 字段中以显示用户。谢谢

default是用来在你的字段上设置一个值的,该方法预计return你的many2one的一个有效值是int,定义一个默认的域使用domain 属性不是默认的,该方法应该是 return 一个有效的域而不是 id 列表,当您在您的字段中进行搜索时,该域将被传递:

 domain=lambda self: [('id',  'in',  self.env['rdv.rdv'].sudo().search([('nb_rdv','>=',1)]).mapped('name_student_id').ids)]