好吧,我的功能里面有很多操作。有一个循环,里面有一个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()