如何查找many2many关系的表名(存储了many2many表名在哪里?)

时间:2015-05-21 06:40:27

标签: postgresql orm xml-rpc odoo

我正在尝试从破坏的Odoo安装中恢复数据(升级搞砸了)。

我已使用postgresql(psql)将所有表格导出为CSV。我也能够处理许多2和1个关系。

对于many2many关系,我需要一种方法来以编程方式找出哪个数据库表包含关系详细信息(来自两个模型的ID)。我试图从ORM" fields_get"中获取数据。使用xmlrpc的功能。字段定义返回一个字典,其中包含一个名为' relation'的键。但是,此键仅包含关系中涉及的其他表/模型的名称。对于很多2个关系,还有另外一个第三个表。我无法找到odoo存储此表名称的位置。

示例数据: 让我试着用一个例子来解释我的问题:在res_partner.py中,字段category_id被定义为:

'category_id': fields.many2many('res.partner.category', id1='partner_id', id2='category_id', string='Tags')`

基于此,Odoo将创建一个新表,它将保存许多关系细节。该表的名称由Odoo自动选择。我需要知道我遇到的每个many2many字段的表名。

' fields_get'函数为此字段返回以下内容:

'category_id': {'domain': [], 'change_default': False, 'string': 'Tags', 'searchable': True, 'required': False, 'manual': False, 'depends': [], 'readonly': False, 'relation':'res.partner.category', 'context': {}, 'company_dependent': False, 'sortable': True, 'type': 'many2many', 'store': True}

此处未提及表格的名称。我需要创建一个小脚本来读取和导出我的非功能性odoo实例中的数据。当Odoo运行时,它如何知道哪个表可以读取任何多个关系?

此致

Tanveer

2 个答案:

答案 0 :(得分:0)

如果您可以访问模块代码,则第三个对象是从字段描述中定义的:

'my_field_ids': fields.many2many('the_other_object', 'relation_object', 'first_id', 'second_id', string='Field Name')

所以你需要寻找 relation_object 表。

修改

您还可以检查 ir.model.relation 表。它包含所有模块中有关many2many关系的所有信息。你可以尝试这样的事情:

{"jsonrpc":"2.0","method":"call","params":{"model":"ir.model.relation","domain":[["model","=","my_model"]]}}

答案 1 :(得分:0)

我想解释odoo框架如何为many2many创建相关表 例如,我们在您的model1中创建了“ category_id”,在其他model2中创建了与many2many

的关系

现在 为每个模型odoo在Psql中创建表,因此为models1 odoo在Psql table:model1中创建,为第二个模型Psql创建table: Model2 并且为关系many2many Psql创建第三个,他的名字是table:model1_Model2

因此在odoo中,使用underscore和2个表名称

创建此表