2011-12-29 88 views
6

osv.osv提供了一個get_xml_id方法來查找提供的數據庫ID的XML ID。 做相反的最好方法是什麼?如何從XML ID獲取數據庫ID

瞭解XML Id(它是在數據加載文件中定義的),如何獲取相應的數據庫ID,以便我可以在巡迴Python代碼中引用它?

回答

7

ir_model_data對象有一個_get_id()方法可以完成要查找的任務。你可以看到它在使用中the res_users._get_admin_id() method

def _get_admin_id(self, cr): 
    if self.__admin_ids.get(cr.dbname) is None: 
     ir_model_data_obj = self.pool.get('ir.model.data') 
     mdid = ir_model_data_obj._get_id(cr, 1, 'base', 'user_root') 
     self.__admin_ids[cr.dbname] = ir_model_data_obj.read(cr, 1, [mdid], ['res_id'])[0]['res_id'] 
    return self.__admin_ids[cr.dbname] 
+1

感謝。管理得到單線解決方案工作:self.pool.get('ir.model.data')。get_object(cr,uid,'hr_timesheet','analytic_journal')。ID – 2012-01-12 12:23:10

10

ir.model.data機型還具有get_object()方法返回給定的型號名稱和xml_id可瀏覽記錄。

因此,另一種解決方案可能是:

m = self.pool.get('ir.model.data') 
    id = m.get_object(cr, uid, 'base', 'user_root').id 
+0

更清潔的解決方案,謝謝。 – Yajo 2014-02-25 09:14:06