2017-09-26 6 views
2

Odooの関数で再帰を使用できますか? はOdooの再帰的プログラミング

def create_lines(self, item_id=None, parent_id=None): 
    source_items = self.env['product.source'] 
    duplicate_items = self.env['product.duplicate'] 
    recs = source_items.search([['parent_id', '=', item_id]]) 
    for rec in recs: 
     value = { 'parent_id': parent_id, 
        'name': rec.name, 
        'date': rec.date, 
        'description': rec.description 
       } 
     line = duplicate_items.create(value) 
     self.create_lines(self, rec.id, line.id) 

以下の私のコードでは、私はSQLite objects created in a thread can only be used in that same thread

ですが、なぜでしょうを取得していますか?また、どのようにOdooで再帰を有効にすることができますか?

+1

メッセージを完全には関連させずに、関数を再度呼び出すときに自己パラメータを削除してみてください。 – dccdany

答えて

1

再帰内でinteractive python debuggeripdb.set_trace();を使用しているため、エラーが発生しました。

また、私はそれが無限に再帰しませんので、この

def create_lines(self, item_id=False, parent_id=False): 
    source_items = self.env['product.source'] 
    duplicate_items = self.env['product.duplicate'] 
    recs = source_items.search([['parent_id', '=', item_id]]) 
    for rec in recs: 
     value = { 'parent_id': parent_id, 
        'name': rec.name, 
        'date': rec.date, 
        'description': rec.description 
       } 
     line = duplicate_items.create(value) 
     childs = source_items.search([['parent_id', '=', rec_id]]) 
     if (len(childs)): 
      self.create_lines(self, rec.id, line.id) 

ように私の再帰を修正する必要があります。