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

时间:2017-09-12 06:50:30

标签: 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
                            })

所以我想要做的是将此代码放在一个事务中。这将是一个非常大的SQL操作,所以当发生错误时,我希望它是 rollbacked 并取消所有操作(Transaction!)。否则提交它。但我不知道是否有可能在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()

0 个答案:

没有答案