2015-09-15 33 views
6

Mam następującą funkcję w klasie hr_evaluation_interview:Jak wykonać zapytanie w Odoo-8 z Pythona?

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

Uwaga: Ja tylko daje id=119 w zapytaniu do celów testowych.

Po udzieleniu self.deadline=datetime.now.strftime(%Y-%m-%d %H:%M:%S") działa poprawnie i zmienia wartość pola deadline, gdy zmienia się wartość pola evaluation_id. Znowu tylko do testowania.

To, czego naprawdę potrzebuję, to wykonanie zapytania podobnego do tego, o którym wspomniałem. Jednak gdy wykonuję to zapytanie, nic nie drukuje w polu deadline. Kiedy sprawdzić dziennik widzę to ostrzeżenie:

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

Próbowałem sprawdzanie dlaczego to ostrzeżenie w Internecie, ale dostał żadnej pomocy. czy robię coś źle? Jak dokładnie mogę wykonać zapytanie z poziomu @api.onchange(self)?

+0

Istnieje wiele takich przykładów dostępnych już w podstawowym kodzie odoo do wykonania zapytania. Tutaj, po wykonaniu zapytania, nadal musisz wywołać instrukcję pobierania, aby uzyskać wynik. –

+0

Czy mógłbyś podać kod? – solving12

Odpowiedz

5

Jak powiedział Hardik, cr.execute() nie zwraca bezpośrednio wyniku. Po wykonaniu zapytania musisz pobrać wartości z kursora. Spróbuj tak:

@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

Dzięki za odpowiedź, ale jest napisane, że obiekt AttributeError: "NoneType" nie ma atrybutu "fetchone":/Każdy pomysł, co jest nie tak? – solving12

+0

Próbowałem tej kwerendy z Postgres oddzielnie i działa dobrze, więc zwrot nie jest Brak dla tego zapytania. – solving12

+0

Baza danych, z której próbuję pobrać dane, jest zdefiniowana w innej klasie modelu (hr_evaluation_interview) i pracuję w innej klasie modelu w tym samym pliku (hr_evaluation_interview). Ale przy wykonywaniu zapytania nie ma znaczenia, który model wykonuję poprawnie? – solving12

1

Jeśli evaluation_id jest m2o pole hr.evaluation.evaluation modelu można spróbować poniżej kodu. w ogóle nie musisz wykonywać kwerendy.

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