diff --git a/odoo/addons/base/models/ir_model.py b/odoo/addons/base/models/ir_model.py index 7831f6a308a..e12ef594159 100644 --- a/odoo/addons/base/models/ir_model.py +++ b/odoo/addons/base/models/ir_model.py @@ -1751,13 +1751,9 @@ class IrModelConstraint(models.Model): 'Constraints with the same name are unique per module.'), ] - def _module_data_uninstall(self): - """ - Delete PostgreSQL foreign keys and constraints tracked by this model. - """ - if not self.env.is_system(): - raise AccessError(_('Administrator access is required to uninstall a module')) - + def unlink(self): + self.check_access_rights('unlink') + self.check_access_rule('unlink') ids_set = set(self.ids) for data in self.sorted(key='id', reverse=True): name = tools.ustr(data.name) @@ -1802,7 +1798,7 @@ class IrModelConstraint(models.Model): sql.Identifier(table), sql.Identifier(hname))) _logger.info('Dropped CONSTRAINT %s@%s', name, data.model.model) - self.unlink() + return super().unlink() def copy(self, default=None): default = dict(default or {}) @@ -2449,8 +2445,6 @@ class IrModelData(models.Model): modules._remove_copied_views() # remove constraints - constraints = self.env['ir.model.constraint'].search([('module', 'in', modules.ids)]) - constraints._module_data_uninstall() delete(self.env['ir.model.constraint'].browse(unique(constraint_ids))) # If we delete a selection field, and some of its values have ondelete='cascade',