2016-06-02 15 views
1

多くの接続モデルからの値を使ってフィールドを計算するにはどうすればよいですか?私は私のモデルとmany2many関係を持っている別のモデルの名前を連結したことを私のモデルにフィールドを計算しようとしています

class p2_vm(models.Model): 
    _name = 'p2.vm' 
    def _get_hostfunction_names(self): 
     names = [] 
     for id in self.hostfunction_ids: 
      names.append(id.name) 
     self.functions = ','.join(names) 

    hostfunction_id = fields.Many2many('p2.hostfunction') 
    functions = fields.Char(compute=_get_hostfunction_names) 

他のモデルがあります:

class p2_hostfunction(models.Model): 
    _name = 'p2.hostfunction' 
    name = fields.Char('Name', required=True) 
    vm_id = fields.Many2many('p2.vm') 

私は何をしたいのですか?

+0

_get_hostfunction_namesの上にpu @ api.oneがあります。 – prakash

答えて

2

あなたが@api.multi@api.depends('field_name')であなたの計算方法を飾る必要があり、あなたがこのようなものになってしまいます。また

@api.multi 
@api.depends('hostfunction_id') 
def _get_hostfunction_names(self): 
    for item in self: 
     item.functions = ','.join([x.name for x in item.hostfunction_id]) 

、代わりに現在のオブジェクトを渡すの文字列で計算メソッドを宣言することをお勧めします、どんな場合でもオーバーライドを容易にするために、fields.Char(compute='_get_hostfunction_names')のようにします。

+0

申し訳ありませんが、「計算メソッドを文字列で宣言する」という意味がわかりません。あなたが言ったのはまさに私がそれをやったか?なぜ@ api.multiを使うべきか説明することもできますか? – raarts

+0

ああ、今私はそれを得る、引用符。ありがとう。 – raarts

+0

はい、これは機能します。ありがとうございました。 – raarts

関連する問題