This question has been flagged
4 Replies
19908 Views

Hi,

I am trying to recover data from a broken odoo installation (uprade got screwed up).

I have exported all the tables to CSV using postgresql (psql). I would also be able to handle many2one and one2many relations.

For many2many relations, I need a way to programatically find out which database table contains the relation details (ids from both the models). I tried to get the data from the ORM "fields_get" function using xmlrpc. The  field definition returns a dictionary which has a key named 'relation'. However this key contains just the name of the other table/ model involved in the relation. For many2many relations there is another 3rd table involved. I am unable to find where odoo stores the name of this table.

Regards,

Tanveer

Avatar
Discard

You can get the name of the relation table by seeing the fields definition only. Or, odoo maintains a separate table called 'ir_model_relation' containing the module id(like, Project) and the object(model) id(like project_project ) with relation tables name for that object, you can use this table to get all the relation for that particular model(object) .

Best Answer

Hi,

You can get the name of the relation table by seeing the fields definition only. Or, odoo maintains a separate table called 'ir_model_relation' containing the module id(like, Project) and the object(model) id(like project_project ) with relation tables name for that object, you can use this table to get all the relation for that particular model(object) .

Thanks

Avatar
Discard
Author

Thanks Pawan. Your answer points me to the correct direction. I saw the ir_model_relation table, it provides the names of the many2many tables created by Odoo. However it only provides the module and model id references. When one model has more than one many2many fields, how to identity which row in the table 'ir_model_relation' refers to which field of the model?

Best Answer

i want to explain how odoo framework create related table for many2many for exemple we have your model1 where you created "category_id" and the other model2 where you Create the relation with many2many

Now for each models odoo create table in Psql , so for models1 odoo create in Psql table:model1and for the second model Psql create table: Model2 and for the relation many2many Psql create the third his name is table:model1_Model2

so in odoo create this table with underscore and the 2 table Name

Avatar
Discard
Best Answer

In Odoo 9, you can query ir_model_fields to get the table name from the relation_table column.  
I'm not too sure about 7 and 8, but I think in 6.1 you could check the field definition from a fields get - something like:

self.fields_get(cr, uid, ['my_m2m_field'])['my_m2m_field']['third_table']

Avatar
Discard
Best Answer

Go to settings and from technical menu there is many2many option from where you can fetch all the many2many tables of your project

Avatar
Discard