Skip to content

Deleted model with many2many field and _drop_column #3649

@ypapouin

Description

@ypapouin

I'm currently trying to migrate a 12.0 database to 13.0 and the openupgrade --update=all step is done.
Now, I'm applying official odoo update and I'm falling on this error:

ERROR mig_9008 odoo.sql_db: bad query: DELETE FROM ir_model WHERE id IN (​xxx)
ERROR: update or delete on table "ir_model" violates foreign key constraint "ir_model_relation_model_fkey" on table "ir_model_relation"
DETAIL:  Key (id)=(xxx) is still referenced from table "ir_model_relation".

Looking at the openupgrade fork, I can see that IrModelFields._drop_column override default behaviour in order to keep the SQL column.

Following is an extract of the openupgrade log

INFO mig_9008 odoo.addons.base.models.ir_model: Deleting 17054@ir.model.fields (hr_holidays.field_hr_holidays_summary_dept____last_update) 
WARNING mig_9008 OpenUpgrade: Module Unknown: Not dropping the column of field __last_update of model hr.holidays.summary.dept 
INFO mig_9008 odoo.models.unlink: User #1 deleted ir.model.data records with IDs: [2195364] 
INFO mig_9008 odoo.models.unlink: User #1 deleted ir.model.fields records with IDs: [17054] 
INFO mig_9008 odoo.addons.base.models.ir_model: Deleting 17053@ir.model.fields (hr_holidays.field_hr_holidays_summary_dept__write_date) 
INFO mig_9008 odoo.models.unlink: User #1 deleted ir.model.data records with IDs: [2195363] 
INFO mig_9008 odoo.models.unlink: User #1 deleted ir.model.fields records with IDs: [17053] 
INFO mig_9008 odoo.addons.base.models.ir_model: Deleting 17052@ir.model.fields (hr_holidays.field_hr_holidays_summary_dept__write_uid) 
INFO mig_9008 odoo.models.unlink: User #1 deleted ir.model.data records with IDs: [2195362] 
INFO mig_9008 odoo.models.unlink: User #1 deleted ir.model.fields records with IDs: [17052] 
INFO mig_9008 odoo.addons.base.models.ir_model: Deleting 17051@ir.model.fields (hr_holidays.field_hr_holidays_summary_dept__create_date) 
INFO mig_9008 odoo.models.unlink: User #1 deleted ir.model.data records with IDs: [2195361] 
INFO mig_9008 odoo.models.unlink: User #1 deleted ir.model.fields records with IDs: [17051] 
INFO mig_9008 odoo.addons.base.models.ir_model: Deleting 17050@ir.model.fields (hr_holidays.field_hr_holidays_summary_dept__create_uid) 
INFO mig_9008 odoo.models.unlink: User #1 deleted ir.model.data records with IDs: [2195360] 
INFO mig_9008 odoo.models.unlink: User #1 deleted ir.model.fields records with IDs: [17050] 
INFO mig_9008 odoo.addons.base.models.ir_model: Deleting 17049@ir.model.fields (hr_holidays.field_hr_holidays_summary_dept__display_name) 
WARNING mig_9008 OpenUpgrade: Module Unknown: Not dropping the column of field display_name of model hr.holidays.summary.dept 
INFO mig_9008 odoo.models.unlink: User #1 deleted ir.model.data records with IDs: [2195359] 
INFO mig_9008 odoo.models.unlink: User #1 deleted ir.model.fields records with IDs: [17049] 
INFO mig_9008 odoo.addons.base.models.ir_model: Deleting 17048@ir.model.fields (hr_holidays.field_hr_holidays_summary_dept__id) 
INFO mig_9008 odoo.models.unlink: User #1 deleted ir.model.data records with IDs: [2195358] 
INFO mig_9008 odoo.models.unlink: User #1 deleted ir.model.fields records with IDs: [17048] 
INFO mig_9008 odoo.addons.base.models.ir_model: Deleting 17047@ir.model.fields (hr_holidays.field_hr_holidays_summary_dept__holiday_type) 
WARNING mig_9008 OpenUpgrade: Module Unknown: Not dropping the column of field holiday_type of model hr.holidays.summary.dept 
INFO mig_9008 odoo.models.unlink: User #1 deleted ir.model.data records with IDs: [2195357] 
INFO mig_9008 odoo.models.unlink: User #1 deleted ir.model.fields records with IDs: [17047] 
INFO mig_9008 odoo.addons.base.models.ir_model: Deleting 17046@ir.model.fields (hr_holidays.field_hr_holidays_summary_dept__depts) 
WARNING mig_9008 OpenUpgrade: Module Unknown: Not dropping the column of field depts of model hr.holidays.summary.dept 
INFO mig_9008 odoo.models.unlink: User #1 deleted ir.model.data records with IDs: [2195356] 
INFO mig_9008 odoo.models.unlink: User #1 deleted ir.model.fields records with IDs: [17046] 
INFO mig_9008 odoo.addons.base.models.ir_model: Deleting 17045@ir.model.fields (hr_holidays.field_hr_holidays_summary_dept__date_from) 
WARNING mig_9008 OpenUpgrade: Module Unknown: Not dropping the column of field date_from of model hr.holidays.summary.dept 
INFO mig_9008 odoo.models.unlink: User #1 deleted ir.model.data records with IDs: [2195355] 
INFO mig_9008 odoo.models.unlink: User #1 deleted ir.model.fields records with IDs: [17045] 
INFO mig_9008 odoo.addons.base.models.ir_model: Deleting 978@ir.model (hr_holidays.model_hr_holidays_summary_dept) 
ERROR mig_9008 odoo.sql_db: bad query: DELETE FROM ir_model WHERE id IN (978)
ERROR: update or delete on table "ir_model" violates foreign key constraint "ir_model_relation_model_fkey" on table "ir_model_relation"
DETAIL:  Key (id)=(978) is still referenced from table "ir_model_relation".

So, all fields definition and their relative XML-ID are deleted (even the m2m field_hr_holidays_summary_dept__depts) but many2many tables are kept intact.
From my understanding, this error should happen each time a model with a many2many field is deleted while updated with openupgrade.

What is the proper way to deal with this:

  • Write a pre-migration.py and add DELETE FROM ir_model_relation ... ?
  • Hack the openupgrade's _drop_column code to automatically delete the table relation stored in ir_model_relation when the field is deleted (without dropping the many2many table) ?

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions