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
Ricordati di dichiarare la versione di Odoo a cui riferisce la domanda

ARGOMENTO: Problema def write in un nuovo modulo

Problema def write in un nuovo modulo 6 Anni 11 Mesi fa #6664

  • DAmico
  • Avatar di DAmico
  • Offline
  • Senior Boarder
  • Messaggi: 74
  • Karma: 0
Salve a tutti,

sto riscontrando un problema con la funzione write in un modulo che ho realizzato, e non riesco a capire dove sbaglio; per favore potreste dare un'occhiata per mettermi sulla buona strada ?

Nel file PY del nuovo modulo ho creato le due funzioni "create" e "write" per verificare alcuni campi prima di eseguire le operazioni di salvataggio; ma mentre la funzione create funziona regolarmente la write non va .....
def create(self, cr, uid, vals, context=None):
        if (vals['campo1']+vals['campo2']) != 100:
            raise osv.except_osv(_('Attenzione!'), _('La somma dei campi deve essere uguale a 100!'))
            return False
        return super(mia_tabella, self).create(cr, uid, vals, context=context)

    def write(self, cr, uid, ids, vals, context=None):
        p0=vals.get('campo1', 0)
        p1=vals.get('campo2', 0)
        ptot = p0+p1
        if (p0+p1) != 100:
            raise osv.except_osv(_('Attenzione!'), _('La somma dei campi deve essere uguale a 100! %s' %ptot))
            return False
        return super(mia_tabella, self).write(cr, uid, ids, vals, context=context)

Da quanto ho potuto capire sembra che nella funzione write i valori del record in uso della tabella non vengano passati e pertanto il risultato è sempre zero.

se all'interno della write provo le istruzioni:
    def write(self, cr, uid, ids, vals, context=None):
        if not 'campo1' in vals:
            raise osv.except_osv(_('Attenzione!'), _('Errore nel campo1'))
            return False

viene eseguita l'eccezione per qualsiasi valore di campo1

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

Re:Problema def write in un nuovo modulo 6 Anni 11 Mesi fa #6665

  • DAmico
  • Avatar di DAmico
  • Offline
  • Senior Boarder
  • Messaggi: 74
  • Karma: 0
Ok, ho capito il problema; ovviamente durante la write vengono passati solo i campi modificati e non l'intero record pertanto devo leggerlo per averli.

Ciao
Ultima modifica: 6 Anni 11 Mesi fa da DAmico.
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

Re:Problema def write in un nuovo modulo 6 Anni 11 Mesi fa #6666

  • OpenCode
  • Avatar di OpenCode
  • Offline
  • Gold Boarder
  • Vi Veri Veniversum Vivus Vici
  • Messaggi: 179
  • Ringraziamenti ricevuti 32
  • Karma: 4
Il problema è dovuto dal fatto che la write viene chiamata prima della create. Potrà suonare strano ma è così...basta inserire un
print 'WRITE'
nella funzione write ed un
print 'CREATE'
nella funzione create per vedersi stampare
WRITE
CREATE
nel terminale. Questo spiega perchè il valore è sempre zero....infatti basta vedere che
p0=vals.get('campo1', 0)
p1=vals.get('campo2', 0)
Se ad esempio imposti
p0=vals.get('campo1', 400)
vedrai che campo1 ti ritornerà sempre 400.
Ultima modifica: 6 Anni 11 Mesi fa da OpenCode.
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.
Tempo creazione pagina: 0.163 secondi

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

Protected by R Antispam