以下方法存在于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
答案 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版本样式,
所有OpernERP v7方法都不能接受odoo v8样式,所以我通过删除
@api.multi
来更新我的答案OpenERP V7方法的直接转换 - >带装饰的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