代码之家  ›  专栏  ›  技术社区  ›  strike_noir

Odoo中的递归编程

  •  2
  • strike_noir  · 技术社区  · 8 年前

    在我下面的代码中

    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

    1 回复  |  直到 8 年前
        1
  •  1
  •   strike_noir    8 年前

    结果是因为我正在使用 interactive python debugger ipdb.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)