我正在尝试从破坏的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
答案 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)
model1
中创建了“ category_id”,在其他model2
中创建了与many2many 的关系
现在
为每个模型odoo在Psql中创建表,因此为models1 odoo在Psql table:model1
中创建,为第二个模型Psql创建table: Model2
并且为关系many2many Psql创建第三个,他的名字是table:model1_Model2
因此在odoo中,使用underscore
和2个表名称