过滤 Many2one 字段 - Odoo v8
Filter Many2one field - Odoo v8
我知道我可以使用 domain
标志从 python 代码甚至 xml 视图中过滤 Many2one
字段,但我的情况略有不同现在,
考虑使用这样的模型:
class MyModel(models.Model):
_name = 'mymodel'
fieldsel = fields.Selection([('sheet', 'Sheet'),('reel','Reel')], string='Printing PPT Type',
track_visibility='onchange', copy=False,
help=" ")
fieldmany = fields.Many2one('text.paper', string="Text Paper")
text.paper
模型有另一个选择字段,其值与 fieldsel
相同,但是,我不能使用 domain
,因为它会静态过滤每个 text.paper
.
我的问题是,我需要根据我从 fieldsel
中选择的选项过滤 text.paper
,所以,假设 text.paper
看起来像这样:
class text_paper(models.Model):
_name = 'text.paper'
name = fields.Char(string="Code")
paper_type = fields.Selection([('sheet', 'Sheet'),('reel','Reel')], string="Paper Type")
我需要根据 fieldsel
字段从 mymodel
到 text.paper
进行过滤,如果选择了卷轴,则过滤 text.paper
是卷轴,如果 sheet 选中,相应地过滤 text.paper
。
希望我已经解释清楚了。
有什么想法吗?
你需要的是 many2one 的动态域,你可以通过 onchange 事件来实现
class MyModel(models.Model):
_name = 'mymodel'
....
...
@api.onchange('fieldsel ')
def change_domain(self):
"""change the domain of fieldmany whenever the user changes the selected value."""
self.fieldmany = False # may be you want to reset the value when the user changes the selected value
if self.fieldsel : # make sure the user has selected a value
return {'domain': {fieldmany: [('paper_type', '=', self.fieldsel)]}}
else: # remove domain
return {'domain': {fieldmany: []}}
我知道我可以使用 domain
标志从 python 代码甚至 xml 视图中过滤 Many2one
字段,但我的情况略有不同现在,
考虑使用这样的模型:
class MyModel(models.Model):
_name = 'mymodel'
fieldsel = fields.Selection([('sheet', 'Sheet'),('reel','Reel')], string='Printing PPT Type',
track_visibility='onchange', copy=False,
help=" ")
fieldmany = fields.Many2one('text.paper', string="Text Paper")
text.paper
模型有另一个选择字段,其值与 fieldsel
相同,但是,我不能使用 domain
,因为它会静态过滤每个 text.paper
.
我的问题是,我需要根据我从 fieldsel
中选择的选项过滤 text.paper
,所以,假设 text.paper
看起来像这样:
class text_paper(models.Model):
_name = 'text.paper'
name = fields.Char(string="Code")
paper_type = fields.Selection([('sheet', 'Sheet'),('reel','Reel')], string="Paper Type")
我需要根据 fieldsel
字段从 mymodel
到 text.paper
进行过滤,如果选择了卷轴,则过滤 text.paper
是卷轴,如果 sheet 选中,相应地过滤 text.paper
。
希望我已经解释清楚了。
有什么想法吗?
你需要的是 many2one 的动态域,你可以通过 onchange 事件来实现
class MyModel(models.Model):
_name = 'mymodel'
....
...
@api.onchange('fieldsel ')
def change_domain(self):
"""change the domain of fieldmany whenever the user changes the selected value."""
self.fieldmany = False # may be you want to reset the value when the user changes the selected value
if self.fieldsel : # make sure the user has selected a value
return {'domain': {fieldmany: [('paper_type', '=', self.fieldsel)]}}
else: # remove domain
return {'domain': {fieldmany: []}}