是否可以在 Odoo v10 中进行交易?如果是,怎么做?

Ant*_*njo 5 python transactions odoo-10

好吧,我的函数中有很多操作。有一个循环,里面有一个self.create()函数,在它里面还有另一个包含另一个create函数的循环,依此类推……但它们的 ID 相互依赖。

这是一个代码示例(缩小)

@api.multi
def create_report(self):
    id_report = None
    reports = [ResumeReport(resume) for resume in data] # a tab containing many reports to be created
    repo = self.env["module1"].search([("date", "=", str(date))])
    if repo:
        for r in repo:
            id_report = r
    else:
        id_report = self.env["module1"].create({
                'name': name
            })
    for rep in report:
        self.env["module2"].create({
                                'report_id': id_report.id,
                                'name': name
                            })
Run Code Online (Sandbox Code Playgroud)

所以我想做的是把这段代码放在一个事务下。这将是一个相当大的 SQL 操作,所以当发生错误时,我希望它被回滚并取消所有操作(事务!)。否则提交。但我不知道是否有可能在 Odoo 10 中做到这一点,因为我没有找到任何关于 transaciton 的文档。

请问你能帮帮我吗?

解决了

@api.multi
def create_report(self):
self._cr.autocommit(False)
try:
    id_report = None
    reports = [ResumeReport(resume) for resume in data] # a tab containing many reports to be created
    repo = self.env["module1"].search([("date", "=", str(date))])
    if repo:
        for r in repo:
            id_report = r
    else:
        id_report = self.env["module1"].create({
                'name': name
            })
    for rep in report:
        self.env["module2"].create({
                                'report_id': id_report.id,
                                'name': name
                            })
self._cr.commit()
except:
self._cr.rollback()
Run Code Online (Sandbox Code Playgroud)