2015-09-01 3 views
1

У меня есть модуль, который реализует метод onchange на res.partner. Если я создаю новую модель, которая наследует res.partner, onchange не вызывается. Есть ли способ сделать onchange вообще, поэтому его также называют унаследованными моделями?Odoo 8 onchange на унаследованных моделях

Пример:

class ResPartner(models.Model): 
    _inherit = 'res.partner' 

    @api.onchange('zip') 
    def _valid_zip(self): 
     print 'Validating zip...' 

class ExtendedPartner(models.Model): 
    _name = 'extendedpartner' 
    _inherits = {'res.partner': 'partner_id'} 

Если изменить почтовый индекс на качестве extendedpartner, то OnChange не называется.

ответ

1

Вы используете делегирование наследования в коде выше. Наследование групп не работает над модельными методами. Это просто делегатов поиск полей, не найденных в текущей модели, в «родительскую» модель.

Я думаю, что вы хотите прототип Наследование:

class ExtendedPartner(models.Model): 
    _name = 'extendedpartner' 
    _inherit = 'res.partner' 

На рисунке ниже показаны три типа наследования, доступных в Odoo:

three types of inheritence avaliable in Odoo

Вы в настоящее время используют первый ("классический наследование ") в ResPartner (который наследуется от res.partner) и последнего (наследование делегирования) в ExtendedPartner. Я думаю, что средний (наследование Prototype) будет более подходящим для ExtendedPartner. Он в основном работает так же, как и стандартное наследование Python.

Вы можете узнать больше о различных типах наследования in the documentation (который также является источником изображения выше).

Смежные вопросы