繁体   English   中英

过滤 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模型有另一个 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")

我需要滤波器从mymodeltext.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM