2011-12-29 3 views
6

osv.osv предоставляет метод get_xml_id для поиска XML-идентификатора для предоставленного идентификатора базы данных. Каков наилучший способ сделать обратное?Как получить идентификатор базы данных из XML-идентификатора

Зная XML-идентификатор (он был определен в файле загрузки данных), как я могу получить соответствующий идентификатор базы данных, чтобы я мог ссылаться на него в коде 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 –

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