根据formView:Odoo 10中另一个字段的值在字段上设置域

时间:2017-08-10 11:46:32

标签: python xml openerp odoo-10

我有三个课程:

class My_module_C(models.Model):
    _name = 'mymodule.c'
    name = fields.Char(description="Name")


class My_module_B(models.Model):
        _name = 'mymodule.c'
        name = fields.Char(description="Name")
        field_c_ids = fields.Many2many('mymodule.c')



class My_module_A(models.Model):
            _name = 'mymodule.a'
            field_c_id = fields.Many2one('mymodule.c')
            field_b_id = fields.Many2many('mymodule.b')

在ModuleA FormView&用户选择“field_c_id”后,我需要过滤“field_b_id”,以便只显示'mymodule.b.field_c_ids'中带有'mymodule.a.field_c_id'的记录 我知道我必须@ api.onchage('fieldc_id'),但我不知道如何返回一个域并将其应用于该字段,任何帮助?

编辑: 我找到了一个解决方案,即:在xml文件中添加字段的域:

domain=" [('field_c_ids.id', '=', field_c)]"

但严重的是我不知道这在逻辑上是如何工作的,我宁愿放下:

domain=" [(field_c, 'in', 'field_c_ids.ids')]"

有人可以向我解释它是如何运作的吗?

1 个答案:

答案 0 :(得分:0)

您可以通过这种方式动态应用域。

@api.multi
@api.onchange('field_c_id')
def onchange_field_c(self):
    res = {}
    if self.field_c_id:
        domain = {'field_b_id':  [('field_c_ids', 'in', self.field_c_id)]}
        return {'domain': domain}
    return res