[FIX] website,sale,auth_signup: prevent shared field deletion
The field `auth_signup_uninvited` is defined in the 3 aforementioned modules, yet they are independant modules in respects to one another. This means that whichever module is installed first will create an XMLID for the field, if this module is uninstalled before the other two: boom! crash when changing general settings because the res.config.settings field set by the other two modules no longer exists. To solve this, we simply ignore the field during ir_model_field.unlink() Fixes #23171
This commit is contained in:
@@ -4,3 +4,4 @@ from . import res_config_settings
|
||||
from . import ir_http
|
||||
from . import res_partner
|
||||
from . import res_users
|
||||
from . import ir_model_fields
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details
|
||||
|
||||
from odoo import models
|
||||
|
||||
|
||||
# This is a nasty hack, targeted for V11 only
|
||||
class IrModelFields(models.Model):
|
||||
_inherit = 'ir.model.fields'
|
||||
|
||||
def unlink(self):
|
||||
# Prevent the deletion of some `shared` fields... -_-
|
||||
self = self.filtered(
|
||||
lambda rec: not (
|
||||
rec.model == 'res.config.settings'
|
||||
and rec.name == 'auth_signup_uninvited'
|
||||
)
|
||||
)
|
||||
return super(IrModelFields, self).unlink()
|
||||
@@ -12,3 +12,4 @@ from . import sale
|
||||
from . import res_config_settings
|
||||
from . import sale_layout
|
||||
from . import sales_team
|
||||
from . import ir_model_fields
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details
|
||||
|
||||
from odoo import models
|
||||
|
||||
|
||||
# This is a nasty hack, targeted for V11 only
|
||||
class IrModelFields(models.Model):
|
||||
_inherit = 'ir.model.fields'
|
||||
|
||||
def unlink(self):
|
||||
# Prevent the deletion of some `shared` fields... -_-
|
||||
self = self.filtered(
|
||||
lambda rec: not (
|
||||
rec.model == 'res.config.settings'
|
||||
and rec.name == 'auth_signup_uninvited'
|
||||
)
|
||||
)
|
||||
return super(IrModelFields, self).unlink()
|
||||
@@ -1,17 +1,15 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details
|
||||
|
||||
from odoo import api, models
|
||||
from odoo import models
|
||||
|
||||
|
||||
# This is a nasty hack, targeted for V11 only
|
||||
class IrModelFields(models.Model):
|
||||
_inherit = 'ir.model.fields'
|
||||
|
||||
@api.multi
|
||||
def unlink(self):
|
||||
# Prevent the deletion of social_* fields defined in res.company if
|
||||
# the other module is installed
|
||||
# Prevent the deletion of some `shared` fields... -_-
|
||||
social = (
|
||||
'social_facebook',
|
||||
'social_github',
|
||||
@@ -23,8 +21,9 @@ class IrModelFields(models.Model):
|
||||
|
||||
self = self.filtered(
|
||||
lambda rec: not (
|
||||
rec.model == 'res.company' and
|
||||
rec.name in social
|
||||
(rec.model == 'res.company' and rec.name in social)
|
||||
or (rec.model == 'res.config.settings'
|
||||
and rec.name == 'auth_signup_uninvited')
|
||||
)
|
||||
)
|
||||
return super(IrModelFields, self).unlink()
|
||||
|
||||
Reference in New Issue
Block a user