diff --git a/odoo/addons/base/i18n/base.pot b/odoo/addons/base/i18n/base.pot
index d170af6ea4d786c5ca66f3af0958b3378e34b66a..dbe6081f23b0ae207cb2234da9fdc7dbfe5bb9b8 100644
--- a/odoo/addons/base/i18n/base.pot
+++ b/odoo/addons/base/i18n/base.pot
@@ -16525,6 +16525,12 @@ msgstr ""
 msgid "No of Views"
 msgstr ""
 
+#. module: base
+#: code:addons/base/models/ir_actions.py:0
+#, python-format
+msgid "No spaces allowed in view_mode: %r"
+msgstr ""
+
 #. module: base
 #: model:ir.model.fields,field_description:base.field_ir_model_data__noupdate
 msgid "Non Updatable"
@@ -22209,6 +22215,12 @@ msgstr ""
 msgid "The model this field belongs to"
 msgstr ""
 
+#. module: base
+#: code:addons/base/models/ir_actions.py:0
+#, python-format
+msgid "The modes in view_mode must not be duplicated: %s"
+msgstr ""
+
 #. module: base
 #: model:ir.model.constraint,message:base.constraint_res_country_name_uniq
 msgid "The name of the country must be unique !"
diff --git a/odoo/addons/base/models/ir_actions.py b/odoo/addons/base/models/ir_actions.py
index 5d207e805917375092632072cdd0a3269bc1ee1f..fb0fa446b5dcdbc40774eec1fcf06805101b449e 100644
--- a/odoo/addons/base/models/ir_actions.py
+++ b/odoo/addons/base/models/ir_actions.py
@@ -173,6 +173,15 @@ class IrActionsActWindow(models.Model):
                     act.views.append((act.view_id.id, act.view_id.type))
                 act.views.extend([(False, mode) for mode in missing_modes])
 
+    @api.constrains('view_mode')
+    def _check_view_mode(self):
+        for rec in self:
+            modes = rec.view_mode.split(',')
+            if len(modes) != len(set(modes)):
+                raise ValidationError(_('The modes in view_mode must not be duplicated: %s') % modes)
+            if ' ' in modes:
+                raise ValidationError(_('No spaces allowed in view_mode: %r') % modes)
+
     @api.depends('res_model', 'search_view_id')
     def _compute_search_view(self):
         for act in self: