我知道我可以使用Many2one
标记从python代码甚至xml视图中过滤domain
字段,但我现在的情况略有不同,
考虑使用这样的模型:
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
。< / p>
我的问题是,我需要根据我从text.paper
选择的选项来过滤fieldsel
,所以,让我们说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")
我需要根据mymodel
text.paper
进行过滤,具体取决于fieldsel
字段,如果选择了卷轴,过滤text.paper
卷轴,如果选择了工作表,则过滤{ {1}}相应的。
我希望我已经解释过了自己。
有什么想法吗?
答案 0 :(得分:2)
你需要的是动态域,你可以通过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: []}}