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: Write

Write 2 Anni 10 Mesi fa #23769

  • Jado
  • Avatar di Jado
  • Offline
  • Junior Boarder
  • Messaggi: 35
  • Karma: 0
Salve a tutti, sto cercando di modificare la funzione write, e quindi al salvataggio dell'articolo mi deve eseguire anche una mia funzione oltre a quello che fa già. Mettiamo caso che la mia funzione è
print "Pippo"
. Cerco di sovrascrivere la funzione write così :
@api.multi
          def write(self, vals):
              value = super(ProductProduct, self).write(vals)
              print "Pippo"
              return value

Ora quando salvo il risultato è
Pippo
Pippo
Perchè? E come posso risolvere?? Grazie :sorry:
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

Write 2 Anni 10 Mesi fa #23772

  • Antoniov
  • Avatar di Antoniov
  • Online
  • Administrator
  • Messaggi: 1555
  • Ringraziamenti ricevuti 283
  • Karma: -115
Come hai dichiarato la classe?
Se ricordo bene dovrebbe essere qualcosa tipo
class product_product(osv.osv):
    _inherit = 'product.product'
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.

Write 2 Anni 10 Mesi fa #23773

  • Jado
  • Avatar di Jado
  • Offline
  • Junior Boarder
  • Messaggi: 35
  • Karma: 0
Ciao grazie per la risposta, la classe è questa:
class ProductProduct (models.Model):
    _inherit = 'product.product'
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

Write 2 Anni 10 Mesi fa #23774

  • Antoniov
  • Avatar di Antoniov
  • Online
  • Administrator
  • Messaggi: 1555
  • Ringraziamenti ricevuti 283
  • Karma: -115
Mi sembra che la dichiarazione sia corretta.
Hai provato a vedere cosa succede in debugging?
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.

Write 2 Anni 10 Mesi fa #23775

  • Jado
  • Avatar di Jado
  • Offline
  • Junior Boarder
  • Messaggi: 35
  • Karma: 0
dopo il return value va a fare cose che penso sono quelle che fa la write di default:
subito dopo il return value va qua:
def make_wrapper(decorator, method, old_api, new_api):
262  	    """ Return a wrapper method for ``method``. """
263  	    def wrapper(self, *args, **kwargs):
264  	        # avoid hasattr(self, '_ids') because __getattr__() is overridden
265  	        if '_ids' in self.__dict__:
266  ->	            return new_api(self, *args, **kwargs)
267  	        else:
268  	            return old_api(self, *args, **kwargs)
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

Write 2 Anni 10 Mesi fa #23777

  • Antoniov
  • Avatar di Antoniov
  • Online
  • Administrator
  • Messaggi: 1555
  • Ringraziamenti ricevuti 283
  • Karma: -115
Non seguire in debug tuttte le chiamate, sono troppe.
Doversti verificare se la write è eseguita due volte.

Una possibile strada è:
nel source inserisci l'importazione del dbugger e dell'ispezionatore
import pdb
import inspect
Inserisci il breakpoint come prima istruzione della write
quando catturi il break puoi osservare lo stack con
print inspect.stack()

Dovresti scoprie se la write viene eseguita due volte (come è probabile), quando e perchè.

Devi avere un po' di pazienza

PS per conoscenza
loa stack contiene una riga per ogni chiamata, inspect.stack()[1] è il chiamante di livello superiore
ogni riga ha più elementi, l'elemento inspect()[n][1] è il nome del file chiamante
Puoi trovare documentazione su internet per maggiori dettagli
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.196 secondi

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

Protected by R Antispam