Questo sito utilizza cookie per le proprie funzionalità e per inviarti pubblicità e servizi in linea con le tue preferenze. Chiudendo questo banner, scorrendo questa pagina o cliccando qualunque suo elemento acconsenti all’uso dei cookie.

Accedendo al link http://www.odoo-italia.org/index.php/home/cookie-policy puoi leggere in dettaglio le modalità di trattamento dei cookie da parte dell'Associazione Odoo Italia.

Benvenuto, Ospite
Nome utente: Password: Ricordami

ARGOMENTO: super() applicato a method

super() applicato a method 1 Anno 6 Mesi fa #29107

  • ndrini
  • Avatar di ndrini
  • Offline
  • Gold Boarder
  • Messaggi: 291
  • Ringraziamenti ricevuti 22
  • Karma: 0
Ciao a tutti.
Qualcuno, nonostante l'estate, ha voglia di commentare con me questo parte di codice?
(fonte github.com/OCA/sale-workflow/blob/8.0/sa...models/sale_order.py )
from openerp import api, fields, models
class SaleOrder(models.Model):
        _inherit = 'sale.order'

	@api.model
	def _prepare_invoice(self, order, line_ids):
	    res = super(SaleOrder, self)._prepare_invoice(order, line_ids)
	    if order.type_id:
	        res['sale_type_id'] = order.type_id.id 
	    if order.type_id.journal_id:
	        res['journal_id'] = order.type_id.journal_id.id
	    return res

Sto parlando di odoo 8.0. in una nuova classe che eredita il model sale.order, cambio il funzionamento del method _prepare_invoice, dando un diverso valore al dizionario res, in corrispondenza delle chiavi sale_type_id e journal_id.

Questo quello che ho capito io.

Ma se volessi, semplicemente, che il method, una volta esteso, scrivesse un print, come dovrei fare?
	@api.model
	def _prepare_invoice(self, order, line_ids):
	    super(SaleOrder, self)._prepare_invoice(order, line_ids)
            print "ciao"
?

Andrea
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

super() applicato a method 1 Anno 6 Mesi fa #29112

  • gigidn
  • Avatar di gigidn
  • Offline
  • Platinum Boarder
  • Messaggi: 1925
  • Ringraziamenti ricevuti 446
  • Karma: 22
La soluzione è come hai fatto :) .... non ho capito dove sta il problema .....

Devi pero' ritornare res
	@api.model
	def _prepare_invoice(self, order, line_ids):
	    res = super(SaleOrder, self)._prepare_invoice(order, line_ids)
            print "ciao"
            return res
@KTec
www.ktec.it
Ultima modifica: 1 Anno 6 Mesi fa da gigidn.
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.
Ringraziano per il messaggio: ndrini

super() applicato a method 1 Anno 6 Mesi fa #29115

  • ndrini
  • Avatar di ndrini
  • Offline
  • Gold Boarder
  • Messaggi: 291
  • Ringraziamenti ricevuti 22
  • Karma: 0
gigidn ha scritto:
La soluzione è come hai fatto :) .... non ho capito dove sta il problema .....

Devi pero' ritornare res
	@api.model
	def _prepare_invoice(self, order, line_ids):
	    res = super(SaleOrder, self)._prepare_invoice(order, line_ids)
            print "ciao"
            return res

Grazie Luigi, della correzione, che ogni lettera, in programmazione, conta! :-)

Penso, molto semplicemente, di non avere chiaro il comportamento di super() in python in generale, e la cosa si complica in python@odoo.

Per me super().nome_metodo è un modo per richiamare un metodo, appunto.

Se a res (RES = Resource), che ho sempre pensato fosse un dizionario, assegno un modulo (e cancello tutti gli altri dati?) non capisco più che sto facendo?

Andrea
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

super() applicato a method 1 Anno 6 Mesi fa #29116

  • Antoniov
  • Avatar di Antoniov
  • Online
  • Administrator
  • Messaggi: 1555
  • Ringraziamenti ricevuti 283
  • Karma: -115
super() esegue il metodo originale della classe.
Se non richiami super() ti sostituisci integralmente al funzionamento della classe e di solito è una pessima idea.
Tu puoi anche chiamare super() e poi modificare il risultato.
Ricordati di restituire un valore che sia comprensibe al chiamante.
Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo. - Presidente eletto dell'associazione
Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.
Ringraziano per il messaggio: ndrini

super() applicato a method 1 Anno 6 Mesi fa #29138

  • ndrini
  • Avatar di ndrini
  • Offline
  • Gold Boarder
  • Messaggi: 291
  • Ringraziamenti ricevuti 22
  • Karma: 0
Antoniov ha scritto:
super() esegue il metodo originale della classe.
Se non richiami super() ti sostituisci integralmente al funzionamento della classe e di solito è una pessima idea.
Tu puoi anche chiamare super() e poi modificare il risultato.
Ricordati di restituire un valore che sia comprensibe al chiamante.

Si, a parole, ci sono. Invece poi nella pratica "mi incarto".
Mi devo esercitare prima con python "da solo".
Grazie.
Andrea
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

super() applicato a method 1 Anno 6 Mesi fa #29139

  • Antoniov
  • Avatar di Antoniov
  • Online
  • Administrator
  • Messaggi: 1555
  • Ringraziamenti ricevuti 283
  • Karma: -115
Se vuoi capire qualcosa di più puoi usare il mio modulo tndb
github.com/zeroincombenze/l10n-italy-supplemental/tree/8.0

Qui ci sono alcuni appunti sull'uso
wiki.zeroincombenze.org/it/Odoo/opt/tndb

Nell'header del software inserici l'import
from tndb import tndb

Hai a disposizione due funzioni:
tndb.wlog : permette di registrare una lista di valori nel log
tndb.wstamp: come la precedente ma ti inserisce lo stack dei 5 livelli superiori del chiamante

Il file di log è nella directory del log con il nome oe_trace.log
Lo devi cancellare prima dell'esecuzione
Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo. - Presidente eletto dell'associazione
Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.
Tempo creazione pagina: 0.130 secondi

Odoo Italia Associazione - C.F: 94200470485 - Sede: Viale dei Cadorna, 83 - Firenze - Italy

Protected by R Antispam