Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to execute query in Odoo-8 from Python?

I have the following function in the class hr_evaluation_interview:

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

Note: I'm just giving id=119 in the query for testing purposes.

When I give self.deadline=datetime.now.strftime(%Y-%m-%d %H:%M:%S") it works fine and changes the value of field deadline when the value of field evaluation_id changes. Again for just testing.

What I really need is to execute a query similar to what I mentioned. However when I execute this query nothing is printing on the deadline field. When I check the log I see this warning:

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

I tried checking online why this warning, but got no help. Am I doing something wrong? How exactly can I execute query from within @api.onchange(self)?

like image 407
solving12 Avatar asked Sep 15 '15 10:09

solving12


2 Answers

As Hardik said, cr.execute() doesn't return directly you result. You need to fetch the values from the cursor after executing the query. Try like this:

@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]
like image 75
Andrei Boyanov Avatar answered Sep 24 '22 18:09

Andrei Boyanov


If evaluation_id is m2o field of hr.evaluation.evaluation model you can try below code. you don't need to execute query at all.

@api.onchange('evaluation_id')
def onchange_evalID(self):
    if self.evaluation_id and self.evaluation_id.date:
        self.date = self.evaluation_id.date
like image 25
Atul Arvind Avatar answered Sep 26 '22 18:09

Atul Arvind