使用域过滤器

时间:2015-05-27 08:14:58

标签: python python-2.7 openerp onchange 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

和我的领域中的域名。

<field name="subject_id" domain=_onchange_lecturer />

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

1 个答案:

答案 0 :(得分: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

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

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