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: [9.0]Differenza fra un metodo normale e api.multi

[9.0]Differenza fra un metodo normale e api.multi 3 Anni 3 Settimane fa #23240

  • iceseyes
  • Avatar di iceseyes
  • Offline
  • Fresh Boarder
  • Messaggi: 2
  • Karma: 0
Buongiorno a tutti,
sono nuovo del forum e in generale della programmazione di moduli ODOO.

Ho cominciato da poco a sviluppare piccole modifiche ai moduli, e ho ancora molti dubbi su come sia giusto procedere in certi aspetti.

In particolare vi scrivo per avere chiarimenti sul significato del decoratore api.multi: che differenza c'è fra un metodo "normale" e uno multi? Entrambi dovrebbe operare un recordset che in generale può avere da 0 a molti recordo (non singleton)... quindi quando si usa uno e quando l'altro??

Vi pongo la questione perché mi è sorto il problema sviluppando questa classe:
class AccountJournal(models.Model):
    _inherit = "account.journal"
   _goodType = ("sale", "purchase")
    
    good = fields.Boolean(compute='_isGood')
    
    @api.one
    @api.depends("type")
    def _isGood(self):
        self.good = self.isGOOD()
    
    def isGOOD(self):
        for journal in self:
            if journal.type not in self._goodTypes:
                return False
            
        return True

Se definisco
@api.multi
def isGOOD(self):
        for journal in self:
            if journal.type not in self._goodTypes:
                return False
            
        return True

Invece in recordset contiene sempre tutti i record... Perchè?

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

[9.0]Differenza fra un metodo normale e api.multi 3 Anni 3 Settimane fa #23247

  • eLBati
  • Avatar di eLBati
  • Online
  • Platinum Boarder
  • Messaggi: 1766
  • Ringraziamenti ricevuti 186
  • Karma: 38
iceseyes ha scritto:
Invece in recordset contiene sempre tutti i record... Perchè?

Intendi in self? Tutti i record intendi un recordset grande quanto?
Lorenzo Battistini
github.com/eLBati

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

[9.0]Differenza fra un metodo normale e api.multi 3 Anni 3 Settimane fa #23248

  • iceseyes
  • Avatar di iceseyes
  • Offline
  • Fresh Boarder
  • Messaggi: 2
  • Karma: 0
Si, scusa.. intendevo in *self*...

In pratica in self, nel secondo caso, quando sono sul form in editing mi ritrovo tutti i journal (e non solo il record su cui sto lavorando).
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

[9.0]Differenza fra un metodo normale e api.multi 1 Anno 10 Mesi fa #27573

  • ndrini
  • Avatar di ndrini
  • Offline
  • Gold Boarder
  • Messaggi: 291
  • Ringraziamenti ricevuti 22
  • Karma: 0
iceseyes ha scritto:
Si, scusa.. intendevo in *self*...

In pratica in self, nel secondo caso, quando sono sul form in editing mi ritrovo tutti i journal (e non solo il record su cui sto lavorando).



Da odoo-new-api-guide-line.readthedocs.io/en/latest/decorator.html
la descrizione di "@api.multi":
Self will be the current RecordSet without iteration. It is the default behavior:

@api.multi
def afun(self):
	len(self)

Cioè con multi Odoo passa a self tutti i record del recordset (cioè tutti i diari che sono stati definiti).
Ecco perché li ritrovi tutti.

Se fosse:
@api.one
def afun(self):
	len(self)

len(self) sarebbe, credo, 1, perché passa un solo valore di self alla volta.
Ultima modifica: 1 Anno 10 Mesi fa da ndrini. Motivo: corretto un errore di digitazione
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.
Tempo creazione pagina: 0.135 secondi

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

Protected by R Antispam