2016-09-19 6 views
0

私は製品カテゴリグリッドで行われたものと同様の階層名を表示する "complete_name"フィールドを作成しようとしていますが、動作させることができません。新しいフィールド "complete_name"を使用して関連するビューにアクセスすると、無限の読み込み画面にOdooが置かれます。Odooの製品カテゴリで使用されるようなカスタム階層のカスタムモジュールにcomplete_nameフィールドを作成するにはどうすればよいですか?

addons/product/product.pyで使用されているコードをコピーし、.functionタイプの代わりにcomputeを使用してOdoo 9 APIで動作するように移行しようとしましたが、動作しませんでした。 誰かが何が間違っているのか理解するのを助けることができますか?以下は私のビューでcomplete_nameフィールドなしでうまく動作する私のモデルクラスです。

class cb_public_catalog_category(models.Model): 
    _name = "cb.public.catalog.category" 
    _parent_store = True  
    parent_left = newFields.Integer(index = True) 
    parent_right = newFields.Integer(index = True) 
    name = newFields.Char(string = 'Category Name') 
    child_id = newFields.One2many('catalog.category', 'parent_id', string = 'Child Categories') 
    complete_name = newFields.Char(compute = '_name_get_fnc', string = 'Name') 

def _name_get_fnc(self): 
    res = self.name_get(self) 
    return dict(res) 

答えて

0

あなたのcompute関数は、クラスの属性の値を定義し、値を返さないものとします。 complete_nameの値が文字列であることを確認してください。

また、name_get()はタプルを返します。私はあなたが実際にこのタプルの文字列表現を望むのか、実際の名前の値だけを望むのかは分かりません。

あなたが本当にその後、name_get()これを試すことにより、返されたものをしたい場合は、この

def _name_get_fnc(self): 
    self.complete_name = self.name_get()[1] 

を試してみてください。

def _name_get_fnc(self): 
    self.complete_name = str(self.name_get()) 

それでも問題が解決しない場合、私はあなたにcomplete_nameの値を設定しているものの良いアイデアを得るために、いくつかのログを組み込むだろう。

import logging 
_logger = logging.getLogger(__name__) 

def _name_get_fnc(self): 
    _logger.info("COMPUTING COMPLETE NAME") 
    _logger.info("COMPLETE NAME: " + str(self.name_get())) 
    self.complete_name = self.name_get() 

これは、それが明らかになりません場合は、問題が何であるか、あなたは常にそれをあなたのビューに問題があることをオフのチャンスで値を割り当てる静的に試みることができます。

def _name_get_fnc(self): 
    self.complete_name = "TEST COMPLETE NAME" 
+0

お返事ありがとうございました。似たようなことをしようとしている別のユーザーがあなたの答えを得ることができて便利だと思っていますが、私の答えはずっと簡単でした。私はちょうどそれがすべて間違った笑をやっていた。 – user2292630

0

私は自分の質問に答えていると思います。それは非常に単純なことの多くと同様に判明します。

"_inherit"を使用し、product.category モデルを継承するだけです。これによりcomplete_nameフィールド を含むproduct.categoryのすべての関数とフィールド にアクセスし、私のカスタムモデルデータから名前を計算します。私は 私の_name_get_funcを削除し、継承した 関数を使用することができました。

最終的なモデルの定義は以下のとおりです。この の更新が完了したら、「complete_name」フィールド を私のビューに追加することができ、結果は必要に応じて得られました!

class cb_public_catalog_category(models.Model): 
    _name = "cb.public.catalog.category" 
    _inherit = 'product.category' 
    _parent_store = True  
    parent_left = newFields.Integer(index = True) 
    parent_right = newFields.Integer(index = True) 
    name = newFields.Char(string = 'Category Name') 
    child_id = newFields.One2many('catalog.category', 'parent_id', string = 'Child Categories') 
関連する問題