在 Odoo v8 中,如何在给定 table 中创建记录时调用函数?
In Odoo v8, how can I have a function called when a record is created in a given table?
我正在尝试在售出某些产品时自动创建合同。我在产品中添加了一个字段,指向模板合同。
我知道@api.depends,但这依赖于创建field.function。我不需要字段,但仍希望调用我的函数。我怎样才能做到这一点?
您需要重写产品的写入方法,在内部您可以像这样调用您的函数,
def write(self, cr, uid, ids, vals, context=None):
# add your custom code here
return super(class_name,self).write(cr, uid, ids, vals, context=context)
你需要在vals中检查你的字段,如果这个字段的值已经改变,你的字段(我认为状态字段)将可用,检查如下。
if vals.get('state',False):
## call your function
请记住,您只会获得更新后的 vals 中的那些字段。
希望对您有所帮助。
您还可以查看来自 OCA 的 auditlog 模块代码,他们已经实现了记录记录的操作...
但是如果你想让它灵活、可定制并避免硬编码,你最好使用 action rules ...
操作规则允许您将操作绑定到对象创建和更新。如果想hook其他方法这里是a possible approach 提出类似问题(日志删除):
我正在尝试在售出某些产品时自动创建合同。我在产品中添加了一个字段,指向模板合同。
我知道@api.depends,但这依赖于创建field.function。我不需要字段,但仍希望调用我的函数。我怎样才能做到这一点?
您需要重写产品的写入方法,在内部您可以像这样调用您的函数,
def write(self, cr, uid, ids, vals, context=None):
# add your custom code here
return super(class_name,self).write(cr, uid, ids, vals, context=context)
你需要在vals中检查你的字段,如果这个字段的值已经改变,你的字段(我认为状态字段)将可用,检查如下。
if vals.get('state',False):
## call your function
请记住,您只会获得更新后的 vals 中的那些字段。
希望对您有所帮助。
您还可以查看来自 OCA 的 auditlog 模块代码,他们已经实现了记录记录的操作...
但是如果你想让它灵活、可定制并避免硬编码,你最好使用 action rules ...
操作规则允许您将操作绑定到对象创建和更新。如果想hook其他方法这里是a possible approach 提出类似问题(日志删除):