Python 多个滤清器1字段-奥多v8
我知道我可以使用Python 多个滤清器1字段-奥多v8,python,openerp,odoo-8,Python,Openerp,Odoo 8,我知道我可以使用domain标志从python代码甚至xml视图中过滤manyOne字段,但我现在有一个稍微不同的场景 考虑使用这样的模型: class MyModel(models.Model): _name = 'mymodel' fieldsel = fields.Selection([('sheet', 'Sheet'),('reel','Reel')], string='Printing PPT Type', track_visibility='onchan
domain
标志从python代码甚至xml视图中过滤manyOne
字段,但我现在有一个稍微不同的场景
考虑使用这样的模型:
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")
class text_paper(models.Model):
_name = 'text.paper'
name = fields.Char(string="Code")
paper_type = fields.Selection([('sheet', 'Sheet'),('reel','Reel')], string="Paper Type")
text.paper
模型有另一个选择字段,该字段的值与fieldsel
相同,但是,我不能使用domain
,因为它将静态过滤每个文本.paper
我的问题是,我需要根据我从fieldsel
中选择的选项筛选text.paper
,因此,让我们假设text.paper
如下所示:
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")
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
,如果选择了纸张,则相应过滤text.paper
我希望我已经解释清楚了
有什么想法吗?您需要的是动态域,您可以通过onchange事件实现这一点
类MyModel(models.Model):
_name='mymodel'
....
...
@api.onchange('fieldsel')
def更改域(自身):
“”“每当用户更改所选值时,请更改fieldmany的域。”“”
self.fieldmany=False#当用户更改所选值时,您可能希望重置该值
如果self.fieldsel:#确保用户选择了一个值
返回{'domain':{fieldmany:[('paper_type','=',self.fieldsel)]}
其他:#删除域
返回{'domain':{fieldmany:[]}
这里帮助@NeoVe记住,当你处理动态域时,你有两个选择,一个简单的onChange就足够了,但有时你需要覆盖name\u search
方法,因为它是许多域调用的过滤记录的函数。很酷,很高兴知道,谢谢!