2016-06-30 5 views
0

под бухгалтером-> счет-фактура Я пытаюсь запустить onchange uppon выбрав клиента (поле: partner_id: many2one) из списка, но он терпит неудачу, тогда как добавление декоратора onchange в поле «origin» (тип: char) работает нормально. может кто-нибудь помочь?Odoo 8: onchange many2one не работает

NB: в режиме отладки Odoo появилось справочное сообщение при перетаскивании мыши в поле клиента, которое привязано к функции onchange: onchange_partner_id (type, ...), интересно, является ли это причиной проблемы

Вот код: I унаследовать от оригинальной модели счета, чем добавление OnChange функции

class stock_picking(models.Model): 
_inherit = "account.invoice" 

#NOT triggered 
@api.onchange('partner_id') 
def _onchange_customer(self): 
    print("debug:y_account_invoice: _onchange_customer:selected") 

#triggered successfully  
@api.onchange('origin') 
def _onchange_origin(self): 
    print("debug:y_account_invoice: _onchange_origin") 

ответ

2

Вам просто нужно переопределить этот метод в ру.

@api.multi 
def onchange_partner_id(self, type, partner_id, date_invoice=False, payment_term=False, partner_bank_id=False, company_id=False): 
    res = super(classname, self).onchange_partner_id(type, partner_id, date_invoice=date_invoice,payment_term=payment_term, partner_bank_id=partner_bank_id, company_id=company_id) 
    #### Update your code 
    # If you want to set any fields value then just simply update it in res and return res 
    res['value'].update({'account_id': new_value,}) 
    return res 

onchange_partner_id уже есть вам нужно переопределить это не определить его снова. И _onchange_origin работает в вашем случае, потому что его там нет.

+0

благодаря Emipro, эта функция срабатывает при partner_id изменений, но теперь я получил эту ошибку:. [... вернуться new_api (самостоятельная, * args, ** kwargs) TypeError: onchange_partner_id() получил несколько значений для аргумента ключевого слова 'date_invoice'.]. обратите внимание, что Im, использующий Pyhon 2.7, также я подтвердил подпись метода в суперклассе и его аргумент 7. Ошибка запускается при открытии нового счета (разбор кода по умолчанию) – Salim

+0

Не могли бы вы показать мне свой код? это хорошо, если вы можете добавить его к вопросу. –

+0

Я добавил код, который вызывает супер – Salim

1

Я нашел альтернативное решение моей проблемы (не идеально). Я переписываю всю функцию из ядра account_invoice в свой пользовательский модуль, который наследует его, а затем добавил на него свой настраиваемый код. Так что партнер по функции изменения запускается в обычном режиме (исключая супер вызов)

#overwritten function 
    @api.multi 
    def onchange_partner_id(self, type, partner_id, date_invoice=False, 
     payment_term=False, partner_bank_id=False, company_id=False): 
    #KEEP the Core Code 
    #custom code 
    #add the sales person to the result in case it was not False 
    if user_id_sales_per != False: 
     print("Debug:account.invoice.onchange_partner_id(): my custom code") 
+0

Всегда рекомендуется называть супер, потому что вы никогда не знаете, сколько мест этот метод будет вызван, поэтому старайтесь избегать полного переопределения, если это необходимо. Поскольку вы думаете, что уже добавили его базовый код в свою функцию, но он никогда не пройдет вперед, и он сломает этот канал исполнения. –

+0

Вы правы, вызов супер всегда лучше – Salim