diff --git a/odoo/addons/base/i18n/base.pot b/odoo/addons/base/i18n/base.pot index 0418e6dd0df..837ad5bde12 100644 --- a/odoo/addons/base/i18n/base.pot +++ b/odoo/addons/base/i18n/base.pot @@ -18228,6 +18228,12 @@ msgstr "" msgid "Invalid 'group by' parameter" msgstr "" +#. module: base +#: code:addons/base/models/ir_default.py:0 +#, python-format +msgid "Invalid JSON format in Default Value field." +msgstr "" + #. module: base #. odoo-python #: code:addons/base/models/ir_ui_view.py:0 diff --git a/odoo/addons/base/models/ir_default.py b/odoo/addons/base/models/ir_default.py index 1026f846382..3c5e6fe36bd 100644 --- a/odoo/addons/base/models/ir_default.py +++ b/odoo/addons/base/models/ir_default.py @@ -22,6 +22,14 @@ class IrDefault(models.Model): condition = fields.Char('Condition', help="If set, applies the default upon condition.") json_value = fields.Char('Default Value (JSON format)', required=True) + @api.constrains('json_value') + def _check_json_format(self): + for record in self: + try: + json.loads(record.json_value) + except json.JSONDecodeError: + raise ValidationError(_('Invalid JSON format in Default Value field.')) + @api.model_create_multi def create(self, vals_list): self.clear_caches() diff --git a/odoo/addons/base/tests/test_ir_default.py b/odoo/addons/base/tests/test_ir_default.py index 4981a03d9a9..1d05722db52 100644 --- a/odoo/addons/base/tests/test_ir_default.py +++ b/odoo/addons/base/tests/test_ir_default.py @@ -143,3 +143,13 @@ class TestIrDefault(TransactionCase): IrDefault.with_context(allowed_company_ids=company_b_a.ids)._get_model_defaults('res.partner')['ref'], 'CBDefault', ) + + def test_json_format_invalid(self): + """ check the _check_json_format constraint """ + IrDefault = self.env['ir.default'] + field_id = self.env['ir.model.fields'].search([('model', '=', 'res.partner'), ('name', '=', 'ref')]) + with self.assertRaises(ValidationError): + IrDefault.create({ + 'field_id': field_id.id, + 'json_value': '{"name":"John", }', + })