diff --git a/odoo/addons/base/models/ir_model.py b/odoo/addons/base/models/ir_model.py index 0eafd4e6cfe..1b5ea5e7794 100644 --- a/odoo/addons/base/models/ir_model.py +++ b/odoo/addons/base/models/ir_model.py @@ -2059,6 +2059,16 @@ class IrModelData(models.Model): else: records_items.append((data.model, data.res_id)) + # avoid prefetching fields that are going to be deleted: during uninstall, it is + # possible to perform a recompute (via flush_env) after the database columns have been + # deleted but before the new registry has been created, meaning the recompute will + # be executed on a stale registry, and if some of the data for executing the compute + # methods is not in cache it will be fetched, and fields that exist in the registry but not + # in the database will be prefetched, this will of course fail and prevent the uninstall. + for ir_field in self.env['ir.model.fields'].browse(field_ids): + field = self.pool[ir_field.model]._fields[ir_field.name] + field.prefetch = False + # to collect external ids of records that cannot be deleted undeletable_ids = []