[英]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
模型有另一个 Selection 字段,它具有与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")
我需要滤波器从mymodel
的text.paper
取决于fieldsel
字段,如果卷轴选择,过滤器text.paper
其是卷轴,并且如果片材选择,过滤器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: []}}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.