2015-11-05 66 views
2

我想用SQL查詢選擇不同的值,因爲我需要id作爲整數。如何從on_change方法以整數形式獲取id?

我的代碼是:

@api.onchange('qty') 
def _on_change_name(self): 
    logging.warning(self.id) 

打印的ID是<openerp.models.NewId object at 0x7fc37d880490>

我怎樣才能從這個id整數?

+0

'help(self.id)'或'dir(self.id)'給你提示嗎? – tdelaney

+0

爲什麼你需要這個ID? – ChesuCR

回答

4

當您在包含計算字段的模型或onchange方法中創建新記錄時,記錄集的記錄將僅位於內存中。當時記錄的ID將是類型openerp.models.NewId

左右的虛擬ID如果您需要使用記錄的ID在你的代碼(如SQL查詢),你應該檢查是否可用:

if isinstance(current_record.id, models.NewId): 
    # do your stuff 

更新。 Zoellner有更好的答案here

查看onchange() line 4971 and following。 Odoo正在創建一個新的緩存/內存記錄,稍後 onchange完成後,使用提供的數據更新自己的緩存。

如果您確實需要該ID或其他字段,請使用 <record>._origin.<field>

注意:不要在onchange方法上使用api.one裝飾器。無論如何,它們都是以單身記錄觸發的 。

+0

我想在SQL查詢中使用它.. – Zety

+0

如果ID不在數據庫中,則不能使用SQL查詢 – ChesuCR

+0

是的。如果我有'Newid'如何獲得一個整數? – Zety

1

要獲得last id我已經執行一個SQL查詢在創建然後我保存它選擇具有最新create_date的ID。

self._cr.execute("SELECT id FROM table ORDER BY create_date DESC LIMIT 1") 
id = self._cr.fetchone()[0] 
相關問題