如何在odoo

时间:2016-07-21 11:59:03

标签: openerp odoo-8 openerp-8 odoo-9

以下方法存在于account.move.line

def _default_get_move_form_hook(self, cursor, user, data):
    data = super(account_move_line, self)._default_get_move_form_hook(cursor, user, data)
    if data.has_key('analytics_id'):
        del(data['analytics_id'])
    return data

我想通过在我的自定义模块中覆盖它来删除它的功能。 任何人都可以告诉我,我该怎么做。 我正在尝试下面的代码:

@api.multi
def _default_get_move_form_hook(self, cr, uid, context=None):
    if self.pool['res.users'].has_group(cr, uid, 'base.group_erp_manager'):
        res = self.pool.get('account.analytic.plan.instance').search(cr, uid, [('code','=','LAL')], context=context)
        return res and res[0] or False
    elif self.pool['res.users'].has_group(cr, uid, 'purchase.group_purchase_user'):
        res = self.pool.get('account.analytic.plan.instance').search(cr, uid, [('code','=','SAS')], context=context)
        return res and res[0] or False

3 个答案:

答案 0 :(得分:1)

在您继承自account.move.line的新模块中 不要使用新的api然后使用旧的每个方法需要4个参数

def _default_get_move_form_hook(self, cr, uid, context=None):
    #put you custom code here

或者只是重新定义具有相同名称的方法,这应该覆盖它

答案 1 :(得分:0)

如果要通过在自定义模块中覆盖它来删除其功能。

您需要保持方法的签名与原始签名相同

def _default_get_move_form_hook(self, cr, uid, data):

而不是

def _default_get_move_form_hook(self, cr, uid, context=None):

稍后您需要确保调用您的方法而不是原始方法,如何?按照步骤..

  • 你需要确保你没有对原始方法进行超级调用。 还有
  • 搜索原始方法是从模块或odoo的一部分调用,
  • 将模块中的类替换为原始模块中原始类调用的方法

试试这个..。

谢谢!

<强>更新

您需要确保要覆盖的方法使用相同的Odoo版本样式,

  

所有OpernERP v7方法都不能接受odoo v8样式,所以我通过删除@api.multi来更新我的答案

     

OpenERP V7方法的直接转换 - &gt;带装饰的Odoo V8并不能保证正常工作,   因此,最佳实践是确保与原始

相同所需的类和方法结构

答案 2 :(得分:0)

要覆盖它,您可以使用:

@api.multi
def _default_get_move_form_hook(self):
    #Custom code

此方法的预期返回值是dict,因此请确保返回dict。

_default_get返回_default_get_move_form_hook结果:

def _default_get(...):   
    ...  
    data = self._default_get_move_form_hook(cr, uid, data)  
    return data

default_get来电default_get

def default_get(self, cr, uid, fields, context=None):
    data = self._default_get(cr, uid, fields, context=context)
    for f in data.keys():
        if f not in fields:
            del data[f]
    return data