api - Odoo 新 API - 覆盖旧 API 函数字段

标签 api overriding odoo openerp-8

我正在尝试覆盖旧的 api 函数字段,但没有成功。 有一个带有辅助方法的函数字段(display_name):

def _display_name_compute(self, cr, uid, ids, name, args, context=None):
    context = dict(context or {})
    context.pop('show_address', None)
    context.pop('show_address_only', None)
    context.pop('show_email', None)
    return dict(self.name_get(cr, uid, ids, context=context))

_display_name = lambda self, *args, **kwargs: self._display_name_compute(*args, **kwargs)

_display_name_store_triggers = {
    'res.partner': (lambda self,cr,uid,ids,context=None: self.search(cr, uid, [('id','child_of',ids)], context=dict(active_test=False)),
                    ['parent_id', 'is_company', 'name'], 10)
}

    'display_name': fields.function(_display_name, type='char', string='Name', store=_display_name_store_triggers, select=True)

这里我需要更改的是display_name_store_triggers,使用新字段进行更新,如果使用这些新字段,将触发此函数字段进行计算。

如果我在源代码中执行此操作:

_display_name_store_triggers = {
    'res.partner': (lambda self,cr,uid,ids,context=None: self.search(cr, uid, [('id','child_of',ids)], context=dict(active_test=False)),
                    ['parent_id', 'is_company', 'name', 'parent_root_id', 'is_branch'], 10)
}

然后它就按照我需要的方式工作了。但我似乎无法在我的模块上继承该触发器和覆盖。

如果我在我的模块上执行此操作:

from openerp.addons.base.res.res_partner import res_partner as res_partner_orig

    _display_name_store_triggers = res_partner_orig._display_name_store_triggers 
    _display_name_store_triggers = {
        'res.partner': (lambda self,cr,uid,ids,context=None: self.search(cr, uid, [('id','child_of',ids)], context=dict(active_test=False)),
                        ['parent_id', 'is_company', 'name', 'parent_root_id', 'is_branch'], 10)
    }

什么也没发生。修改字段 parent_root_idis_branch 时,display_name 字段不会计算。

我在文档中找不到如何使用新 API 覆盖旧函数字段。方法是什么?

最佳答案

尝试以下操作:

@api.one
@api.depends('parent_id','is_company','name')
def _display_name(self):
    for partner in self:
        <<operation on context... you need to check yourself>>
        <<you will have to check how name_get is called and based on  
             the return value set the value as shown below>>
        partner.display_name = <<returned value from name_get>>

display_name = fields.Char(compute="_display_name",string="Display Name")

关于api - Odoo 新 API - 覆盖旧 API 函数字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28361910/

相关文章:

python - 如何从 Android 应用程序连接到 Odoo 数据库

php - HotelBeds Php API 提供空结果

objective-c - 如何覆盖 webView 可以处理的重定向数量。 Obj-C, cocoa

python - odoo 10 后端开发

java - Spring中无法导入 `configureRepositoryRestConfiguration`

python - 如何使用派生类中的属性覆盖基类中的字段?

python - 在python中获取工作表excel的数量

python - 如何在 Windows 10 上获取 ORACLE 11 g DATABASE 的 IP 地址以远程连接到它?

iPhone 从 iPod 应用程序获取视频

c# - 以编程方式将文件 checkin TFS 获得的数量超出预期