使用域过滤器中的功能

Cha*_*mal 5 python onchange openerp python-2.7 odoo-8

我想在我的模块中加载与讲师id相关的主题ID.我使用api onchange如下.

 @api.onchange('lecturer_id')
 def _onchange_lecturer(self):
     if self.lecturer_id:
         sub_id =[]
         a = []
         lecturer = self.lecturer_id.id
         query = """select op_subject_id from lecturer_subject_rel where op_lecturer_id='%s'""" % lecturer
         self.env.cr.execute(query)
         a = self.env.cr.fetchall()
         d = 0
         for i in a:
             e = i[0]
             sub_id.append(e)
             d += 1
         return [('subject_id', 'in', sub_id)]
     else:
         return None
Run Code Online (Sandbox Code Playgroud)

和我的领域的域名.

<field name="subject_id" domain=_onchange_lecturer />
Run Code Online (Sandbox Code Playgroud)

正确的主题ID列表传递.如何根据这些id列表加载主题....?

And*_*ius 1

如果您使用 onchange 方法放置域,则不需要在 xml 中的字段上放置任何域。

你可以这样做:

@api.onchange('lecturer_id')
 def _onchange_lecturer(self):
     res = {}
     if self.lecturer_id:
         sub_id =[]
         a = []
         lecturer = self.lecturer_id.id
         query = """select op_subject_id from lecturer_subject_rel where op_lecturer_id='%s'""" % lecturer
         self.env.cr.execute(query)
         a = self.env.cr.fetchall()
         d = 0
         for i in a:
             e = i[0]
             sub_id.append(e)
             d += 1
         res['domain] = {'subject_id': [('id', 'in', sub_id)]}
     else:
         res['domain] = {'subject_id': []}
     return res
Run Code Online (Sandbox Code Playgroud)

或者您可以简单地创建函数字段来计算所需主题的 id,然后直接在域中使用。

PS但是你搜索ID的代码看起来很奇怪,不知道你为什么这样做。