2016-06-30 17 views
0

unter accounting-> Rechnung Ich versuche, die onchange Uppon Auswahl eines Kunden (Feld: partner_id: many2one) aus der Liste, aber es schlägt fehl, während die Onchange Decorator auf dem Feld hinzufügen "Herkunft" (Typ: char) funktioniert normal. Kann jemand helfen?Odoo 8: onchange many2one funktioniert nicht

Hinweis: Im Odoo-Debugging-Modus wird die Hilfemeldung angezeigt, wenn die Maus auf das Kundenfeld gezogen wird: onchange_partner_id (type, ...), ich frage mich, ob dies der Grund für das Problem ist

Hier

ist der Code: I aus dem ursprünglichen Rechnungsmodell erben als Zugabe der Onchange Funktionen

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") 

Antwort

2

Sie müssen nur diese Methode in py außer Kraft zu setzen.

@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 bereits vorhanden ist, müssen Sie es nicht wieder außer Kraft zu setzen definieren. Und _onchange_origin in Ihrem Fall arbeiten, weil es nicht schon da ist.

+0

dank Emipro (den Super Anruf Weglassen) wird diese Funktion auf partner_id Veränderungen ausgelöst, aber jetzt habe ich diesen Fehler:. [... zurück new_api (self, * args, ** kwargs) TypeError: onchange_partner_id() hat mehrere Werte für das Schlüsselwortargument 'date_invoice'.]. beachte, dass ich mit Pyhon 2.7 auch die Methodensignatur in der Superklasse verifiziert habe und es 7 Argumente hat. Der Fehler wird beim Öffnen einer neuen Rechnung ausgelöst (Parsen des Codes auf Standardwerte) – Salim

+0

Können Sie mir bitte Ihren Code zeigen? Es ist gut, wenn Sie es der Frage hinzufügen können. –

+0

Ich fügte den Code hinzu, der den Super – Salim

1

Ich habe eine alternative Lösung zu meinem Problem gefunden (nicht ideal). Ich habe die gesamte Funktion von account_invoice Kern zu meinem benutzerdefinierten Modul überschrieben, die von ihm erben und fügte dann meinen benutzerdefinierten Code darauf hinzu. So, dass der Partner auf Änderungsfunktion normalerweise ausgelöst wird

#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

Es ist immer ratsam, super zu rufen, weil Sie nie wissen, an wie vielen Stellen diese Methode aufgerufen wird. Versuchen Sie also, das Überschreiben zu vermeiden, es sei denn, es ist notwendig. Weil Sie denken, dass Sie bereits den Basiscode in Ihrer Funktion hinzugefügt haben, aber es wird niemals weitergehen und den Ausführungskanal unterbrechen. –

+0

Sie haben Recht, Anruf Super ist immer besser – Salim

Verwandte Themen