Я безуспешно пытаюсь переопределить старое поле функции 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)
}
Ничего не произошло. Поле display_name
не вычисляется при изменении полей parent_root_id
или is_branch
.
Я не смог найти в документации, как переопределить старое поле функции с помощью нового API. Какой подход?