2011-12-29 68 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