在 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 提出类似问题(日志删除):