[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:
Adrian Torres
2018-02-23 10:28:10 +01:00
committed by GitHub
parent ad1cceb4fb
commit ff7efbb1e8
5 changed files with 45 additions and 6 deletions
+1
View File
@@ -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()
+1
View File
@@ -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
+19
View File
@@ -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()
+5 -6
View File
@@ -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()