Skip to content

Commit 3e22c9a

Browse files
committed
[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 "<decorator-gen-16>", 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 closes #338 Signed-off-by: Christophe Simonis (chs) <chs@odoo.com>
1 parent fbd0b4f commit 3e22c9a

File tree

1 file changed

+12
-0
lines changed

1 file changed

+12
-0
lines changed

src/util/models.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,18 @@ def remove_model(cr, model, drop_table=True, ignore_m2m=()):
175175
for tbl in ["base_action_rule", "base_automation", "google_drive_config"]:
176176
if column_exists(cr, tbl, "model_id"):
177177
cr.execute("DELETE FROM {0} WHERE model_id=%s".format(tbl), [mod_id])
178+
179+
if not version_gte("17.0") and column_exists(cr, "base_automation", "action_server_id"):
180+
cr.execute(
181+
"""
182+
DELETE FROM base_automation b_a
183+
USING ir_act_server action
184+
WHERE b_a.action_server_id = action.id
185+
AND action.binding_model_id = %s
186+
""",
187+
[mod_id],
188+
)
189+
178190
cr.execute("DELETE FROM ir_model_relation WHERE model=%s", (mod_id,))
179191

180192
# remove m2m tables

0 commit comments

Comments
 (0)