2017-08-10 3 views
0

私は三つのクラスがあります。ユーザーは「field_c_id」を選択した後、私がする必要がある、ModuleA FormViewコントロール&では、FormViewコントロール内の別のフィールドの値に応じてフィールドにドメインを設定します。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') 

を"mymodule.b.field_c_ids"に 'mymodule.a.field_c_id'のレコードのみを表示するために "field_b_id"をフィルタリングしてください。 私は@ api.onchage( 'fieldc_id')が必要ですが、返す方法はわかりませんドメインに適用し、フィールド、任意のヘルプに適用されますか?

EDIT:xmlファイル内のフィールドのドメインを追加::私はされるソリューション、見つかっ

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

しかし、真剣に、私は、これは論理的にどのように動作するかわかりませんが、私はむしろ置く:

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

どのように動作するのですか?

答えて

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 
関連する問題