2015-09-15 21 views
6

Ho la seguente funzione nella classe hr_evaluation_interview:Come eseguire query in Odoo-8 da Python?

@api.onchange('evaluation_id') 
def onchange_evalID(self): 
    self.deadline=self.env.cr.execute('SELECT date FROM hr_evaluation_evaluation where id=119') 

Nota: sto solo dando id=119 nella query a scopo di test.

Quando si assegna a self.deadline=datetime.now.strftime(%Y-%m-%d %H:%M:%S"), funziona correttamente e cambia il valore del campo deadline quando cambia il valore del campo evaluation_id. Ancora per il solo test.

Ciò di cui ho veramente bisogno è eseguire una query simile a ciò che ho menzionato. Tuttavia, quando eseguo questa query, nulla viene stampato sul campo deadline. Quando controllo il registro, visualizzo questo avviso:

WARNING db_name openerp.models: Cannot execute name_search, no _rec_name defined on hr_evaluation.evaluation 

Ho provato a verificare online perché questo avviso, ma non ha ricevuto alcun aiuto. Sto facendo qualcosa di sbagliato? In che modo posso eseguire esattamente la query all'interno di ?

+0

Ci sono molti esempi di questo tipo già disponibili nel codice base di odoo per l'esecuzione della query. Qui dopo aver eseguito la query, devi ancora chiamare l'istruzione fetch, per ottenere il risultato. –

+0

potresti fornire qualche codice? – solving12

risposta

5

Come ha affermato Hardik, cr.execute() non restituisce direttamente il risultato. È necessario recuperare i valori dal cursore dopo aver eseguito la query. Prova in questo modo:

@api.onchange('evaluation_id') 
def onchange_evalID(self): 
    self.env.cr.execute('SELECT date ' 
           'FROM hr_evaluation_evaluation where id=119') 
    self.deadline = self.env.cr.fetchone()[0] 
+1

Grazie per la risposta, ma dice 'AttributeError: 'NoneType' l'oggetto non ha attributo 'fetchone'':/Qualche idea di cosa c'è che non va? – solving12

+0

Ho provato questa query con Postgres separatamente e funziona bene, quindi il ritorno non è Nessuno per questa query. – solving12

+0

Il database che sto cercando di recuperare i dati da è definito in un'altra classe modello (hr_evaluation_interview) e sto lavorando in un'altra classe di modello nello stesso file (hr_evaluation_interview). Ma quando si esegue la query, non importa da quale modello sto eseguendo giusto? – solving12

1

Se evaluation_id è m2o campo della hr.evaluation.evaluation modello si può provare qui sotto code. non è necessario eseguire alcuna query.

@api.onchange('evaluation_id') 
def onchange_evalID(self): 
    if self.evaluation_id and self.evaluation_id.date: 
     self.date = self.evaluation_id.date