我制作了一个模块,用于在编辑产品(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)