2017-09-26 116 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) 

所以也沒有無限遞歸。