在odoo中运行代码After write函数(override)



我制作了一个模块,用于在编辑产品(product.template(时执行保存(写入(操作时运行代码。目的是请求外部URL来更新我的网站中的此产品(使用API更新网站的脚本(。

odoo功能是:

class ProductTemplateExtra(models.Model):
_inherit = "product.template"

def write(self,vals):
self.ensure_one()
resultat = super().write(vals)
urlupdate = 'https://...sript.php?i=%s' % (self.id)
try:
f = urlopen(urlupdate)
except:
print("An exception occurred")

return resultat

stript运行良好,但urlopen是在BEFORE super((.write(vars(中执行的,在script.php中,我得到的是OLD值,而不是product.template中的更新值(紧接着,记录会被保存,api会得到更新值,但在执行操作时不会(。

使用Odoo 15CE

我做错了什么?

是的,您将在脚本中获得旧值,因为当代码执行返回语句时,值会保存在数据库中。

在您的情况下,我建议再传递一个参数,并从"vals"变量中获取值。并添加条件以避免多个URL命中。

例如:以下代码仅在产品名称更改时执行。

resultat = super().write(vals)
if 'name' in vals:
urlupdate = 'https://...sript.php?i=%s&product_vals=%s' % (self.id, vals)

相关内容

  • 没有找到相关文章

最新更新