From c805d65889914ee20d1ab36ac54a831251270e61 Mon Sep 17 00:00:00 2001 From: sagu-odoo Date: Fri, 10 Oct 2025 08:29:05 +0000 Subject: [PATCH] [FIX] util/models: Fix constrain voilation before 16.5 https://github.com/odoo/odoo/pull/114352/files#diff-f456849127002cd01a9e2058290e40ae8e5c1d57e15785699f0172400766bcd4R69 there was constraint on field ``action_server_id`` of ``base.automation`` model ON delete restrict https://github.com/odoo/odoo/blob/d07ffce41df433e51d1239be855cd52867b905e0/addons/base_automation/models/base_automation.py#L34C5-L34C21 which causing issue during upgrade when removing model if contextual action created for the same server action ``binding_model_id`` https://github.com/odoo/odoo/blob/3a28e5b0adbb36bdb1155a6854cdfbe4e7f9b187/odoo/addons/base/models/ir_actions.py#L35 as below mentioned traceback because due to on delete cascade model will remove.So, server action will also delete. But server action is linked to automated action. So, request will block. For fixing this issue removing the automated action first and then let the model remove. ``` Traceback (most recent call last): File "/home/odoo/src/odoo/16.0/odoo/service/server.py", line 1333, in preload_registries registry = Registry.new(dbname, update_module=update_module) File "", line 2, in new File "/home/odoo/src/odoo/16.0/odoo/tools/func.py", line 87, in locked return func(inst, *args, **kwargs) File "/home/odoo/src/odoo/16.0/odoo/modules/registry.py", line 87, in new odoo.modules.load_modules(registry, force_demo, status, update_module) File "/home/odoo/src/odoo/16.0/odoo/modules/loading.py", line 528, in load_modules migrations.migrate_module(package, 'end') File "/home/odoo/src/odoo/16.0/odoo/modules/migration.py", line 170, in migrate_module exec_script(self.cr, installed_version, pyfile, pkg.name, stage, stageformat[stage] % version) File "/home/odoo/src/odoo/16.0/odoo/modules/migration.py", line 188, in exec_script migrate(cr, installed_version) File "/tmp/tmpegkppsuy/migrations/sale_subscription/saas~15.3.1.1/end-migrate.py", line 20, in migrate util.remove_model(cr, "sale.subscription.line", drop_table=False) File "/tmp/tmpegkppsuy/migrations/util/models.py", line 222, in remove_model cr.execute("DELETE FROM ir_model WHERE id=%s", (mod_id,)) File "/home/odoo/src/odoo/16.0/odoo/sql_db.py", line 324, in execute res = self._obj.execute(query, params) psycopg2.errors.ForeignKeyViolation: update or delete on table "ir_act_server" violates foreign key constraint "base_automation_action_server_id_fkey" on table "base_automation" DETAIL: Key (id)=(3632) is still referenced from table "base_automation". ``` upg-3179507 opw-5148694 --- src/util/models.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/util/models.py b/src/util/models.py index 559dbc656..c92d42a0b 100644 --- a/src/util/models.py +++ b/src/util/models.py @@ -175,6 +175,18 @@ def remove_model(cr, model, drop_table=True, ignore_m2m=()): for tbl in ["base_action_rule", "base_automation", "google_drive_config"]: if column_exists(cr, tbl, "model_id"): cr.execute("DELETE FROM {0} WHERE model_id=%s".format(tbl), [mod_id]) + + if not version_gte("17.0") and column_exists(cr, "base_automation", "action_server_id"): + cr.execute( + """ + DELETE FROM base_automation b_a + USING ir_act_server action + WHERE b_a.action_server_id = action.id + AND action.binding_model_id = %s + """, + [mod_id], + ) + cr.execute("DELETE FROM ir_model_relation WHERE model=%s", (mod_id,)) # remove m2m tables