过滤Many2one字段 - Odoo v8

时间:2017-10-30 18:45:22

标签: python openerp odoo-8

我知道我可以使用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}}相应的。

我希望我已经解释过了自己。

有什么想法吗?

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: []}}