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
  • Pagina:
  • 1
  • 2
  • 3

ARGOMENTO: scrivere sul record corrente tramite cr.execure

scrivere sul record corrente tramite cr.execure 6 Anni 4 Mesi fa #8589

  • gagarin
  • Avatar di gagarin
  • Offline
  • Expert Boarder
  • Messaggi: 148
  • Karma: 0
ciao a tutti,

volendo aggiornare alcuni campi tramite un'overrride del metodo write e scrivendo:

cr.execute('update project_task set partner_id=%s where id=%s', opptasks.partner_id, vals[id])

l'esecuzione di quanto sopra torna questo errore:
KeyError: <built-in function id>


sembra che il problema sia legato alla vals[id].. solo che io devo poter scrivere sul record corrente. Come fare?

grazie dell'aiuto :)

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

Re:scrivere sul record corrente tramite cr.execure 6 Anni 4 Mesi fa #8593

  • enlightx
  • Avatar di enlightx
  • Online
  • Platinum Boarder
  • Messaggi: 6064
  • Ringraziamenti ricevuti 638
  • Karma: 85
se ricordo bene, questo capita quando il "id" che ti trovi tra i piedi non è quello di openerp, ma la funzione che in realtà fa il mapping con l'id di postgresql.

ovvero: quel "vals" non contiene i dati che ti servono.

ti conviene con un debugger fare l'inspecting di vals e vedere cosa c'è dentro
Davide Corio
Odoo Solution Architect
email: Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.
web: www.davidecorio.com
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

Re:scrivere sul record corrente tramite cr.execure 6 Anni 4 Mesi fa #8594

  • angedras
  • Avatar di angedras
  • Offline
  • Platinum Boarder
  • Messaggi: 330
  • Ringraziamenti ricevuti 4
  • Karma: 10
Perchè usi un cr.execute() dentro il write?
Non ti converrebbe invece aggiornare e passare direttamente i vals? Qualcosa del tipo:
    def write(self, cr, uid, ids, vals, context=None):
        
        opptask = self.pool.get ...
        
        vals['partner_id'] == opptask.partner_id.id
        return super(project_task , self).write(cr, uid, ids, vals, context)
Ultima modifica: 6 Anni 4 Mesi fa da angedras.
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

Re:scrivere sul record corrente tramite cr.execure 6 Anni 4 Mesi fa #8598

  • NicoTheBrush
  • Avatar di NicoTheBrush
  • Offline
  • Platinum Boarder
  • Messaggi: 1952
  • Ringraziamenti ricevuti 156
  • Karma: 46
Il tuo errore credo sia la mancanza dell'operatore %, in pratica gli passi tutto il blocco a cr.execute al posto di fare le sostituzioni e poi passare la stringa formattata.

da:
cr.execute('update project_task set partner_id=%s where id=%s', opptasks.partner_id, vals[id])

a
cr.execute('update project_task set partner_id=%s where id=%s'%(opptasks.partner_id, vals[id]))
Ultima modifica: 6 Anni 4 Mesi fa da NicoTheBrush.
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

Re:scrivere sul record corrente tramite cr.execure 6 Anni 4 Mesi fa #8603

  • gagarin
  • Avatar di gagarin
  • Offline
  • Expert Boarder
  • Messaggi: 148
  • Karma: 0
@nico:
ho provato, stesso errore:
File "/openerp/server/addons/crm_todo/crm_todo.py", line 35, in write
cr.execute('update project_task set partner_id=%s where id=%s'%(opptasks.partner_id, vals[id]))
KeyError: <built-in function id>

@angedras:
è l'unico modo che ho trovato che si..avvicina.. a quanto voglio ottenere.

In pratica il problema è questo:
Se creo un task da dentro un'opportunità (fattibile con il modulo crm_todo) il task viene creato correttamente ma, se all'opportunità ho assegnato un partner, questo non viene poi assegnato al task. Volevo quindi automatizzare questa assegnazione.
Ho quindi scritto (qui sotto con la modifica di NicoTheBrush):

def write(self, cr, uid, ids, vals, context=None):
myids = self.pool.get('crm.lead').search(cr, uid, [])
for opptasks in self.pool.get('crm.lead').browse(cr, uid, myids, context=context):
if opptasks.id==vals : mylead_id=vals
cr.execute('update project_task set partner_id=%s where id=%s'%(opptasks.partner_id, vals[id]))
return super(project_task, self).write(cr, uid, ids, vals, context=context)

purtroppo non funziona, inoltre se salvo un task dal modulo project spuntano fuori altri errori, comprensibilmente.

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

Re:scrivere sul record corrente tramite cr.execure 6 Anni 4 Mesi fa #8604

  • NicoTheBrush
  • Avatar di NicoTheBrush
  • Offline
  • Platinum Boarder
  • Messaggi: 1952
  • Ringraziamenti ricevuti 156
  • Karma: 46
Puoi salvare in una variabile e fare un print o un debug per vedere come viene trasformata la query?

q='update project_task set partner_id=%s where id=%s'%(opptasks.partner_id, vals[id])
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.
  • Pagina:
  • 1
  • 2
  • 3
Tempo creazione pagina: 0.137 secondi

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

Protected by R Antispam