过滤 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 字段从 mymodeltext.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: []}}